MongoDB Java客户端存储" _id" as on" replaceOne"

时间:2017-02-19 11:48:52

标签: mongodb mongodb-java

我们已升级(从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?

1 个答案:

答案 0 :(得分:0)

这是replaceOne的预期行为。

  

如果是,MongoDB会将_id字段添加到替换文档中   未在过滤器或替换文档中指定。如果_id是   两者都存在,价值必须相等。

因此,在创建新文档时,它会将_id用作null。