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

时间:2014-03-10 13:07:30

标签: mongodb

我有一系列具有以下结构的文件

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

我要求组文档中的每个收件人由单元格编号唯一标识。但是,多个组可以拥有相同的收件人。如何确保每个组都有一个每个收件人都是唯一的收件人子文档。 这是我通过ensureIndex

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

这似乎不起作用,因为现有号码的收件人的添加没有错误。 甚至可以唯一索引子文档数组吗?

感谢。

1 个答案:

答案 0 :(得分:1)

当数组(集合)中的$addToSet元素可能值得研究时,可以使用updating运算符。在你的情况下,你会像这样使用它:

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

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

除此之外,你在代码中管理它。