我在 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} 进行所有插入,我得到的重复值不是由插入操作返回,而是实际插入到集合中。
最佳答案
{unique: true} 只保证对象间的唯一性,不保证数组内数组元素的唯一性。
但是请查看 addToSet mongodb 的功能。
这里也是这个非常相似的问题。 How to ensure unique item in an array based on specific fields - mongoDB?
关于MongoDB - 唯一的多键索引没有按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13248594/