无法使用mongo

时间:2016-01-31 12:26:32

标签: java mongodb bulk upsert

我尝试使用mongodb驱动程序进行upsert,这是一个代码:

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

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

_id

我忘记在我的例子中配置了什么?

1 个答案:

答案 0 :(得分:1)

我不知道dbObject的结构,但是批量Upsert需要一个有效的查询才能工作。

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

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

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

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