Mongodb如果存在覆盖

时间:2017-12-14 11:03:19

标签: java spring mongodb spring-boot spring-data-mongodb

我正在使用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存储库都适用于我。

1 个答案:

答案 0 :(得分:0)

你要

  

重复键错误

因为您Indexed Mongocollection

事实是,如果已经存在具有名称的索引,您试图插入另一个文档,那么它将不允许您插入。 因为索引是唯一的。

  

实现此用例的一种方法是:

     

查找它们是否存在,如果存在,更新或覆盖,否则插入

显然,是的。因为您只能更新某些索引集合,但不能插入任何其他具有相同Index的文档。