首先,我已经阅读了this thread,但这并没有真正帮助我解决这个问题。我也是MongoDB的新手。
我的db.songs
集合中有一个文档:
{
"title" : "Ignorance"
"artist" : "Paramore"
"listeners" : ["John", "Bill", "Amber"]
}
我希望在users
键上强制执行不重复,这样每当我按“John”或现有用户时,我都会收到错误消息。我可以在mongo shell中执行此操作,如果是这样,我如何配置我的集合以使用此行为?
一些示例代码应该给我一个重复的错误(或一些类似的错误):
db.songs.update({title:"Ignorance"}, {'$push':{listeners:"John"}})
提前谢谢。
答案 0 :(得分:1)
db.songs.ensureIndex({listeners:1},{unique:true})
添加此索引不起作用。 MongoDB不会使用唯一索引确保子文档中的唯一性,而是在集合范围内进行集合。这很可能是你为什么会遇到错误的原因。
相反,您要做的是使用将项目添加到" set"项目,即$ addToSet(http://docs.mongodb.org/manual/reference/operator/update/addToSet/)的来源。
删除索引并使用该运算符,它应该可以正常工作。