2012-11-06 39 views
3

我在MongoDB中的多键索引有问题。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}, ...)` 

然后我试图在同一篇文章中两次投票,它实际上增加了完全相同的两次投票。我如何确保数组不会包含重复的元素?

P.S.

我做了所有使用{safe:true}的插入,并且我得到的重复值不是由插入操作返回的,而是实际插入到集合中的。

回答

3

尝试

this.ensureIndex({'votes.votedObjectId': 1, _id: 1}, {unique: true}, ...) 

或过程投票与

this.update( 
    { _id:... , 'votes.votedObjectId':{$ne:'...'} }, 
    { $push: { votes: '...' }} 
) 

希望theese报表可以帮助你整理出来。