MongoDB索引的唯一性值

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了MongoDB索引的唯一性值相关的知识,希望对你有一定的参考价值。

我需要一个索引,它将为我提供所有领域的独特性。例如,我有文件:

{
   _id: ObjectId("123"),
   fieldA: "a",
   fieldB: "b"
}

我想禁止插入文件

{
   _id: ObjectId("456"),
   fieldA: "new value for field a",
   fieldB: "a"
}

因为已存在在字段“fieldA”上设置值“a”的文档。可能吗?

答案

看来你需要一个带有multikey indexunique constraint。考虑到每个集合中只能有一个多键索引,因此您必须在数组中包含您喜欢的所有字段的唯一性

{
   _id: ObjectId("123"),
   multikey: [
              {fieldA: "a"},
              {fieldB: "b"}
             ]
}

试试这段代码吧

db.collection.createIndex( { "multikey": 1}, { unique: true } )

要查询你必须编码

db.collection.findOne({"multikey.fieldA": "a"},    // Query
   {"multikey.fieldA": 1, "multikey.fieldB": 1})   // Projection

有关更多信息,您可以查看embedded multikey文档。

希望这可以帮助。

另一个选择是使用每个唯一键创建一个文档,由此唯一键索引,并在每个候选文档的字段上执行循环,如果找到任何键,则取消写入。 IMO这个解决方案更耗费资源,在更改中它会为您提供书面文档中消耗的所有密钥的列表。

   db.collection.createIndex( { "unikey": 1}, { unique: true } )
   db.collection.insertMany( {[{"unikey": "$FieldA"},{"unikey": "$FieldB"}]} 
   db.collection.find({"unikey": 1})

以上是关于MongoDB索引的唯一性值的主要内容,如果未能解决你的问题,请参考以下文章

mongodb 索引唯一性约束

mongoDB 3.2中的唯一索引忽略空值

MongoDB索引相关文章-摘自网络

MongoDb在并非所有文档中的字段上创建唯一索引[重复]

MongoDB创建索引

MongoDB Indexes