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

标签 mongodb mongodb-query database nosql

让我们有一个 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})

关于mongodb - 如何停止在 mongodb 集合中插入重复文档,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24122981/

相关文章:

php - 构建 mysql 查询和/或 php 代码来关联不明确的数据点

database - 将本地 WordPress 站点连接到远程数据库

node.js - 在 mongodb 中聚合撤消展开

python - 使用 Pymongo 插入文档 - InvalidDocument : Cannot encode object

arrays - 将带有数组的 MongoDB 文档集合分层扁平化为文档

javascript - 仅返回嵌入文档列表中的部分字段

mongodb - Meteor 可以通过 SSL 连接到 MongoDB 吗?

MongoDB Compass 连接问题与 Ec2 实例访问亚马逊 documentDB 集群

mongodb - MongoDB 中的 "Find() inside Insert"?

database - 有没有一种查询文档数据库的有效方法?