1

首先,我已经阅读了这个线程,它并没有真正帮助我解决这个特定问题。我也是 MongoDB 的新手。

我的db.songs收藏中有一份文件:

{
    "title" : "Ignorance"
    "artist" : "Paramore"
    "listeners" : ["John", "Bill", "Amber"]
}

我希望在密钥上不强制重复users,这样每当我按下“John”或现有用户时,我都会收到错误消息。我可以在 mongo shell 中执行此操作吗?如果可以,我如何配置我的集合以使用此行为?

一些示例代码应该给我一个重复的错误(或一些类似的错误):

db.songs.update({title:"Ignorance"}, {'$push':{listeners:"John"}})

先感谢您。

4

1 回答 1

1
db.songs.ensureIndex({listeners:1},{unique:true})

添加此索引将不起作用。MongoDB 不会使用唯一索引确保子文档内的唯一性,而是会在整个集合范围内进行。这很可能就是为什么你会得到错误的原因。

相反,您想要做的是使用将项目添加到项目“集合”的东西,这就是 $addToSet (http://docs.mongodb.org/manual/reference/operator/update/addToSet/)的来源在。

删除您的索引并使用该运算符,它应该可以工作。

于 2014-04-08T11:06:34.160 回答