findAndModify失败并显示错误:"无法更新' field1'和' field1'同时

时间:2014-06-02 10:49:25

标签: java mongodb mongodb-query mongodb-java

我正在尝试构建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}

请有人帮忙吗

1 个答案:

答案 0 :(得分:6)

这里的基本问题是:

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

这基本上就是你要做的事情。

您无法解决 $set 操作中的相同字段作为 $setOnInsert 操作。

逻辑中存在导致您遇到错误的一般问题。