我在MongoDB中遇到了多键索引的问题 .
我有一个名为 users
的集合,其文档看起来或多或少像这样:
{
"_id": ObjectId(),
"name": "John Smith",
...
"votes": [
{
"type": "news",
"votedObjectId": "123"
},
{
"type": "blog",
"votedObjectId": "124"
},
{
"type": "news"
"votedObjectId": "225"
}
]
}
我想在 votedObjectId
上创建一个索引,我希望用户只为每篇文章投票一次 .
我确保了一个唯一的索引(代码在node.js - mongoskin模块中):
`this.ensureIndex({'votes.votedObjectId': 1}, {unique: true}, ...)`
然后我尝试了两次同一篇文章的投票,它实际上添加了两次完全相同的投票 .
如何确保数组不包含重复元素?
附:
我使用{safe:true}执行所有插入操作,并且我获得的重复值不会被插入操作返回,而是实际插入到集合中 .
2 回答
尝试
或进行投票
希望theese的声明可以帮助你解决它 .
{unique:true}仅保证跨对象的唯一性,它不保证数组内数组元素的唯一性 .
但请查看mongodb的addToSet功能 .
这也是这个非常相似的问题 . How to ensure unique item in an array based on specific fields - mongoDB?