我正在使用spring数据mongodb与Mongodb
中的Spring boot
进行通信。
文件结构:
{
"_id" : ObjectId("5a324f8bc23fa147699ee0fb"),
"_class" : "com.mongodb.User",
"name" : "Prakash",
"userId" : NumberLong(1000),
"organisation" : "Inbytes",
"createdOn" : ISODate("2017-12-14T10:16:43.173Z")
}
索引:userId(唯一)
如果我插入任何"userId" : NumberLong(1000)
已存在的文件,
然后我得到此错误:
WriteResult({
"nInserted" : 0,
"writeError" : {
"code" : 11000,
"errmsg" : "E11000 duplicate key error collection: db.user index: userId dup key: { : 1000 }"
}
})
我有一个用例,我必须每天更新100万条记录。他们可能改变他们的领域,如姓名,积分等......
实现此用例的一种方法是:
find if they exist, if exist, update or override, else insert
。
但是这种方法对于大量记录具有很高的延迟。
是否有更好的方法来实现我的用例。本机MongoDB-java和spring mongo-DB存储库都适用于我。
答案 0 :(得分:0)
你要
重复键错误
因为您Indexed
Mongo
已collection
。
事实是,如果已经存在具有名称的索引,您试图插入另一个文档,那么它将不允许您插入。 因为索引是唯一的。
实现此用例的一种方法是:
查找它们是否存在,如果存在,更新或覆盖,否则插入
显然,是的。因为您只能更新某些索引集合,但不能插入任何其他具有相同Index
的文档。