1

我放入集合中的对象的“模式”如下所示:

{
    name : "Niranjan", //<--key
    children : ["Suraj", "kalidas", "Suraj"]
}

但我想确保孩子们被视为一个集合 - 在上面的示例中,我希望 Mongo 不接受记录,因为“Suraj”在数组中出现了两次。

我尝试在名称和孩子上创建一个唯一索引

db.folks.ensureIndex({name:1,children:1},{unique:true})

然而,它的作用是在任何子名 + 民间名称上建立一个全球唯一的索引。也就是说,如果我没有唯一的名称索引,我将能够执行以下操作:

db.folks.insert({name:'p',children:['c1','c2']})
db.folks.insert({name:'p',children:['c3']})

因为 p+c1、p+c2 和 p+c3 是不同的。如果我尝试插入以下内容:

db.folks.insert({name:'p',children:['c4','c1']})

然后我会得到

E11000 duplicate key error index: test.folks.$name_1_children_1  dup key: { : "p", : "c1" }

有没有办法在插入期间不进行 检查,如 https://stackoverflow.com/questions/9640233/unique-array-values-in-mongoose

4

1 回答 1

2

唯一索引将按照您在 MongoDB 未来版本中的预期方式运行:

https://jira.mongodb.org/browse/SERVER-1068

现在,您需要在插入之前检查应用程序中的唯一性。

顺便说一句,当您更新文档时,您可以使用 $addToSet 而不是 $push 来强制执行唯一性:

http://www.mongodb.org/display/DOCS/Updating#Updating-%24addToSetand%24each

于 2012-03-23T18:36:47.553 回答