【问题标题】:How do I ensure uniqueness in an array of subdocuments in Mongo如何确保 Mongodb 中子文档数组的唯一性
【发布时间】:2014-03-10 13:07:30
【问题描述】:

我有一组具有以下结构的文档

{
"_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})

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

谢谢。

【问题讨论】:

标签: mongodb


【解决方案1】:

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

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

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

除此之外,您还可以在代码中管理它。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-08-11
    • 1970-01-01
    • 1970-01-01
    • 2021-07-07
    • 2019-05-20
    • 1970-01-01
    • 2012-05-10
    相关资源
    最近更新 更多