gpt4 book ai didi

java - 无法使用 mongo 进行批量更新插入

转载 作者:行者123 更新时间:2023-12-01 10:30:30 24 4
gpt4 key购买 nike

我正在尝试使用 mongodb 驱动程序进行更新插入,这是代码:

BulkWriteOperation builder = coll.initializeUnorderedBulkOperation();
DBObject toDBObject;
for (T entity : entities) {
toDBObject = morphia.toDBObject(entity);
builder.find(toDBObject).upsert().replaceOne(toDBObject);
}
BulkWriteResult result = builder.execute();

其中“实体”是吗啡对象。当我第一次运行代码时(数据库中没有实体,因此所有查询都应该是 insert),它工作正常,我看到数据库中生成了 实体_id 字段。第二次运行我正在更改一些字段并尝试保存更改的实体,然后我从 mongo 收到以下错误:

E11000 duplicate key error collection: statistics.counters index: _id_ dup key: { : ObjectId('56adfbf43d801b870e63be29') }

我在示例中忘记配置什么?

最佳答案

我不知道 dbObject 的结构,但是批量更新插入需要有效的查询才能工作。

例如,假设您有一个名为“id”的唯一 (_id) 属性。有效的查询如下所示:

builder.find({id: toDBObject.id}).upsert().replaceOne(toDBObject);

这样,引擎可以 (a) 找到要更新的对象,然后 (b) 更新它(或者,如果未找到对象,则插入)。当然,您需要使用 Java 语法进行查找,但同样的规则也适用:确保您的 .find 能够找到某些内容,然后进行更新。

我相信(只是猜测)现在编写的方式将找到“所有”文档并尝试更新第一个文档......但您描述的行为表明它正在查找“无文档”并尝试插入。

关于java - 无法使用 mongo 进行批量更新插入,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35113812/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com