mongodb - 如何停止在 mongodb 集合中插入重复文档

让我们有一个 MongoDB 集合,其中包含三个文档..

db.collection.find()

 { _id:'...', user: 'A', title: 'Physics',   Bank: 'Bank_A' }
 { _id:'...', user: 'A', title: 'Chemistry', Bank: 'Bank_B' }
 { _id:'...', user: 'B', title: 'Chemistry', Bank: 'Bank_A' }

我们有一个文档,

 doc = { user: 'B', title: 'Chemistry', Bank:'Bank_A' }

如果我们使用

 db.collection.insert(doc) 

在这里,这个重复的文档将被插入到数据库中。

 { _id:'...', user: 'A', title: 'Physics',   Bank: 'Bank_A' }
 { _id:'...', user: 'A', title: 'Chemistry', Bank: 'Bank_B' }
 { _id:'...', user: 'B', title: 'Chemistry', Bank: 'Bank_A' }
 { _id:'...', user: 'B', title: 'Chemistry', Bank: 'Bank_A' }

如何阻止这种重复。应该对哪个字段进行索引或任何其他方法?

最佳答案

不要使用插入。

使用 update with upsert=true .更新将查找与您的查询匹配的文档,然后它将修改您想要的字段,然后,如果没有文档与您的查询匹配,您可以告诉它 upsert:True 如果您想插入。

db.collection.update(
   <query>,
   <update>,
  {
    upsert: <boolean>,
     multi: <boolean>,
    writeConcern: <document>
   }
  )

因此,对于您的示例,您可以使用如下内容:

db.collection.update(doc, doc, {upsert:true})

https://stackoverflow.com/questions/24122981/

相关文章:

mongodb - MongoDB可靠吗?

node.js - Mongoose:模式与模型?

arrays - 查询 MongoDB 以匹配数组中的第一项

mongodb - Mongoose 和独特的领域

mongodb - 是否可以展平 MongoDB 结果查询?

mongodb - 如何通过一次调用将一组对象推送到 Mongoose 中的数组中?

python - 从字符串中删除每个非 utf-8 符号

mongodb - 执行 mongoexport 时 "too many positional op

python - Django session

mongodb - 一个数据库的 Mongorestore 给我带来了麻烦