java - MongoDB java通过带有字段的函数更新文档

标签 java mongodb

我正在使用 mongodb 和 java, 我有以下文档结构:

{
     _id : ...
     total_items : 34
     avarage_cost : 54
}

现在我有一个项目及其成本,我想更新我的 Collection ,以便总数增加 1 并且平均成本将是正确的, 最好的方法是什么?

我想过做这样的事情:

int cost = ... ;

BasicDBObject updatequery = new BasicDBObject();
updatequery.put("$inc", BasicDBObjectBuilder.start().add("total_items ", 1).get());    
updatequery.put("$function", "function(){this.avarage_cost = ((this.total_items-1)*this.avarage_cost + "+cost+"/) / this.total_items;}");

这是一个好的/有效的解决方案吗? 最好的方法是什么?

最佳答案

目前您无法在更新查询上运行 JavaScript 代码。 Jira 有一个 Unresolved 问题。检查问题here .

您可以按如下方式解决此问题:

  1. 获取当前对象。
  2. 如果为空,计算average_cost和total_items并插入数据库。
  3. 如果不为空,则获取当前的total_items和average_cost字段。
  4. 计算新的total_items 和average_cost 值。
  5. 使用 $set 更新这些字段查询参数。

关于java - MongoDB java通过带有字段的函数更新文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16512437/

相关文章:

java - 在java中读取具有多个对象的json文件

mongodb - 如何在 NoSql 数据库(MongoDB)中强制执行外键?

node.js - 使用 $set-mongoose 更新字段时保留对象的其余部分

c++ - 在 Mongodb C++ 驱动程序中更新数据库

mongodb - 使用环境变量在 Spring Boot 中配置 MongoDB

python - 监控集群中的mongoDB

java - ACR38 读卡器和 SLE4442 Java 延迟

Java - 方法 "printDuplicates"中的 SecurityException

java - 奇怪的 Swing 编译时可访问性错误

java - IllegalStateException : No language and polyglot implementation was found on the classpath. 确保 truffle-api.jar 位于类路径上