跨多个子文档的MongoDB唯一索引

时间:2015-12-09 17:55:54

标签: mongodb unique-index subdocument

我有这个文档结构,属性“Name”在所有文档中必须是唯一的,如上所示:

{ 
    "_id" : ObjectId("56686341d6389c004c689d5d"), 
    "Bosses" : {
        "B1" : {
            "_id" : NumberInt(1), 
            "Name" : "John"
        },
        "B2" : {
            "_id" : NumberInt(1), 
            "Name" : "Mary"
        }
    }
}

{ 
    "_id" : ObjectId("56686341d6389c004c689d6f"), 
    "Bosses" : {
        "B1" : {
            "_id" : NumberInt(1), 
            "Name" : "Mary" // should throw an error
        }
    }
}

可以使用此结构创建唯一索引吗?

1 个答案:

答案 0 :(得分:1)

是的,您必须在Bosses.Name上创建唯一索引。但是,你必须改变你的架构。 Bosses应该是一个数组:

{ 
    "_id" : ObjectId("56686341d6389c004c689d6f"), 
    "Bosses" : [
        {
            "_id" : NumberInt(1), 
            "Name" : "Mary" // should throw an error
        }
    }
}

如果您确实需要B1,我建议您将其添加到Bosses个对象中:"代码":" B1"。但这可能没有必要,因为您可以通过...find({ "Bosses.0.Name" })

访问数组中的索引