我们已升级(从2.11.1)到
<groupId>org.mongodb</groupId>
<artifactId>mongo-java-driver</artifactId>
<version>3.4.1</version>
现在我们这样做了:
UpdateOptions options = (new UpdateOptions()).upsert(true);
BasicDBObject queryObject = new BasicDBObject("_id", newObject.get("_id"));
//where newObject.get("_id") returns "null", i.e. same as
//BasicDBObject queryObject = new BasicDBObject("_id", null);
UpdateResult result = collection.replaceOne(queryObject, newObject, options);
将使用&#34; _id&#34;插入新文档设置为null(即使先前在集合中不存在_id为null的对象)。当我们做的时候
collection.insertOne(newObject);
而不是一个适当的&#34; _id&#34;生成。为什么&#34; replaceOne&#34;没有生成正确的_id?
答案 0 :(得分:0)
这是replaceOne
的预期行为。
如果是,MongoDB会将_id字段添加到替换文档中 未在过滤器或替换文档中指定。如果_id是 两者都存在,价值必须相等。
因此,在创建新文档时,它会将_id
用作null。