MongoDB唯一性值索引

时间:2019-01-25 16:04:15

标签: mongodb mongodb-indexes

我需要一个索引,该索引将为我提供所有字段之间该字段的唯一性。例如,我有文档:

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

并且我想禁止插入文档

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

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

1 个答案:

答案 0 :(得分:0)

似乎您需要一个multikey index和一个unique 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})