我正在尝试构建MongoDB Java findAndModify查询。

主要目的是我想自己在插入查询中设置 _id

这是我的代码:

BasicDBObject findFilter = new BasicDBObject("type", "group")
//
BasicDBObject dialogInsertObject = new BasicDBObject("name", "my group").append("_id", new ObjectId());
//
BasicDBObject dialogUpdateObject = new BasicDBObject("name", "my group");
//
BasicDBObject upsertMap = new BasicDBObject();
upsertMap.append("$setOnInsert", dialogInsertObject);
upsertMap.append("$set", dialogUpdateObject);


DBObject dialogObject = dialogCollection.findAndModify(findFilter,
   new BasicDBObject("_id", "1"), null, false, upsertMap, true, true);

我得到一个错误:
com.mongodb.CommandFailureException: { "serverUsed" : "localhost:27017" ,
  "errmsg" : "exception: Cannot update 'name' and 'name' at the same time" ,
  "code" : 16836 , "ok" : 0.0}

有人可以帮忙吗

最佳答案

这里的主要问题是:

db.collection.update(
   { "type": "group" },
   {
      "$set": { "mygroup": "value" }
      "$setOnInsert" { "mygroup": "value" }
   }
)

基本上,这就是您要尝试执行的操作。

您不能将 $set 操作中的相同字段作为 $setOnInsert 操作来寻址。

逻辑中存在一个普遍的问题,该问题会导致您遇到错误。

关于java - findAndModify失败,错误为: "Cannot update ' field 1' and ' field1' at the same time,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/23992723/

10-12 12:34
查看更多