MongoDB Java 客户端在“replaceOne”上将“_id”存储为 null

2024-02-19

我们已经升级(从 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);

将插入一个“_id”设置为 null 的新文档(即使集合中先前不存在 _id 为 null 的对象)。当我们这样做时

        collection.insertOne(newObject);

相反,会生成正确的“_id”。为什么“replaceOne”没有生成正确的_id?


这是预期的行为replaceOne.

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

所以它使用_id创建新文档时为 null。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

MongoDB Java 客户端在“replaceOne”上将“_id”存储为 null 的相关文章

随机推荐