【发布时间】:2014-07-22 11:08:15
【问题描述】:
我正在尝试构建 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}
有人可以帮忙吗
【问题讨论】:
-
和错误说的差不多。您不能同时在
$setOnInsert和$set中设置相同的内容。您的dialogInsertObject值也被覆盖。 -
抱歉,更新了 dialogInsertObject。为什么我不能在单个查询中使用 $set 和 $setOnInsert?
-
@NeilLunn 如文档所述, $setOnInsert 用于插入,但 $set 用于更新操作。怎么了?
-
@NeilLunn 阅读 docs.mongodb.org/manual/reference/operator/update/setOnInsert Upsert 导致更新
-
不是你应该说“阅读文档”的人,因为我确信我比大多数人更了解他们。您可以同时使用这两个术语,但问题是您在两者中都使用了相同的“字段”。如果不是这个,请冷静下来阅读我最初所说的话。
标签: java mongodb mongodb-query mongodb-java