如何确保在Mongo的子文档数组中的唯一性



我有一个文档集合,其结构如下

{
"_id" : ObjectId("531db35c4e08d754e036d4c1"),
"name" : "Group 1",
"description" : "First group",
"recipients" : [
    {
        "cellnumber" : "27123456789",
    },
    {
        "cellnumber" : "27987654321",
    },
    {
        "cellnumber" : "27837939043",
    }
],
"creationdate" : NumberLong("1394455388960"),
"accountKey" : "B6D45025BFDC5D2D1E5FA158A2729FCC"
}

我有一个要求,组文档中的每个收件人都由cell号唯一标识。但是,多个组可以有相同的收件人。如何确保每个组都有一个收件人子文档,其中每个收件人都是唯一的?下面是我通过ensureIndex

进行的尝试
> db.groups.ensureIndex({"name":1, "recipients.cellnumber":1}, {unique:true})

这似乎不起作用,因为添加已有号码的收件人没有错误。是否有可能对子文档数组进行唯一索引?

谢谢。

有一个$addToSet操作符,你可以在更新数组(集合)中可能值得研究的元素时使用它。在您的情况下,您可以这样使用:

db.groups.update({
    $addToset: { "receipients": { "cellnumber": "27123456789" } }
})

这将确保收件人字段中的值,只要它们所有都是由cellnumber键入的,它们都是唯一的。

最新更新