mongodb-如何使用Java驱动程序构建多运算符更新语句?

时间:2018-08-07 13:38:05

标签: java mongodb mongodb-query

如何使用Java驱动程序以单个操作在单个文档的不同字段上执行不同的更新? 假设我有一个这样的文件

{
   _id: ObjectId("1234567890")
   ...
   elements: String[],
   last_user: String,
   ...
}

,我想向elements数组添加一个字符串并更新last_user。我可以做到

import static com.mongodb.client.model.Filters.*;
import static com.mongodb.client.model.Updates.*;

...

Bson filter = eq(DBCollection.ID_FIELD_NAME, new ObjectId("1234567890"));
Bson addElement = push("elements", "a new string");
Bson updateLastUser = set("last_user", "last user name");

mycollection.updateOne(filter, addElement);
mycollection.updateOne(filter, updateLastUser);

它可以工作,但是那是两个单独的操作,我根本不喜欢它。

我看到了in this question,有了壳我就可以做到这一点

db.mycollection.update({ "_id": "1234567890" }, 
   {
      "$push" : { "elements": "a new string" }, 
      "$set" : { "last_user": "last user name" }
   }
);

但是我不知道如何使用Java驱动程序构建包含$push$set的单个更新对象。我很确定这很简单而且很愚蠢,但是我找不到解决方案。

1 个答案:

答案 0 :(得分:1)

使用combine

mycollection.updateOne(filter, combine(addElement,updateLastUser);