我想更新My Collection中名为“Users”的多行.现在我单独更新两行,但我想在一个查询中做同样的事情.我目前的代码:coll.update(new BasicDBObject().append(key, k1), new BasicDBObject().append($inc, new Ba...
![](https://oss.womengda.net/imgfile/2310/1ER0631613520-531K.jpg)
我想更新My Collection中名为“Users”的多行.现在我单独更新两行,但我想在一个查询中做同样的事情.
我目前的代码:
coll.update(new BasicDBObject().append("key", k1), new BasicDBObject().append("$inc", new BasicDBObject().append("balance", 10)));
coll.update(new BasicDBObject().append("key", k2), new BasicDBObject().append("$inc", new BasicDBObject().append("balance", -10)));
如何在一个声明中进行这两个单独的更新?
解决方法:
首先让我将您的java代码翻译成shell脚本,以便人们可以阅读它:
db.coll.update({key: k1}, {$inc:{balance:10}})
db.coll.update({key: k2}, {$inc:{balance:-10}})
现在,您无法在一次更新中执行此操作的原因是因为无法为每个匹配的文档提供唯一的更新子句.您可以批量更新,以便您可以执行此操作(伪):
set1 = getAllKeysForBalanceIncrease();
set2 = getAllKeysForBalanceDecrease();
db.coll.update({key:{$in:set1}}, {$inc:{balance:10}}, false, true)
db.coll.update({key:{$in:set2}}, {$inc:{balance:-10}}, false, true)
换句话说,您可以在一个原子写入中更新多个文档,但更新操作对于所有文档都是静态的.因此,聚合所有需要相同更新的文档是您唯一的优化路径.
$in子句可以用Java组成:
ObjectId[] oidArray = getAllKeysEtc();
query = new BasicDBObject("key", new BasicDBObject("$in", oidArray));
沃梦达教程
本文标题为:更新MongoDB java Driver中的多行
![](/xwassets/images/pre.png)
![](/xwassets/images/next.png)
猜你喜欢
- Java中的Comparable和Comparator接口 2023-05-14
- Spring Boot超详细讲解请求处理流程机制 2023-02-28
- 使用SpringDataJpa创建中间表 2023-01-02
- Java实现基础银行ATM系统 2022-11-16
- Java利用栈实现简易计算器功能 2022-11-12
- 解决Lombok使用@Builder无法build父类属性的问题 2023-05-24
- redis实现队列的阻塞、延时、发布和订阅 2022-12-16
- Mybatis在注解上如何实现动态SQL 2023-01-02
- 关于Java的Character类详解 2023-07-15
- java使用枚举封装错误码及错误信息详解 2023-08-08