Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/387.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java findAndModify失败,错误为;无法更新';字段1';和';字段1';同时_Java_Mongodb_Mongodb Query_Mongodb Java - Fatal编程技术网

Java findAndModify失败,错误为;无法更新';字段1';和';字段1';同时

Java findAndModify失败,错误为;无法更新';字段1';和';字段1';同时,java,mongodb,mongodb-query,mongodb-java,Java,Mongodb,Mongodb Query,Mongodb Java,我正在尝试构建MongoDB Java findAndModify查询 主要目的是我想自己在insert查询中设置\u id 这是我的密码: BasicDBObject findFilter = new BasicDBObject("type", "group") // BasicDBObject dialogInsertObject = new BasicDBObject("name", "my group").append("_id", new ObjectId()); // BasicDB

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

主要目的是我想自己在insert查询中设置\u 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(
{“类型”:“组”},
{ 
“$set”:{“mygroup”:“value”}
“$setOnInsert”{“mygroup”:“value”}
}
)
这基本上就是你想要做的

$set
操作中,不能将相同的字段作为
$setOnInsert
操作来处理


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

与错误所说的差不多。不能同时在
$setOnInsert
$set
中设置相同的内容。您的
dialogInsertObject
值也被覆盖。很抱歉,已更新dialogInsertObject。为什么我不能在单个查询中使用$set和$setOnInsert?@NeilLunn正如文档所说,$setOnInsert用于插入,而$set用于更新操作。出什么事了?@NeilLunn read Upsert更新结果不是你应该说的“阅读文档”的人,因为我相信我比大多数人都更了解他们。您可以使用这两个术语问题是您在这两个术语中使用相同的“字段”。如果不是这样的话,请冷静下来,首先阅读我所说的内容。因此,我应该只包括_id到$setOnInsert,这是一个正确的解决方案。Thanks@IgorKhomenko底线是,如果您在两个语句中引用相同的内容,则在实际插入内容时会导致冲突。但我希望你现在能看到。这也让我感到不安,第一句话是错误的。您应该只在$set块中指定它,因为$set即使在插入新文档时也会被应用。它们不是相互排斥的(熟悉MySQL的重复键语法让我感到困惑)。