Mongodb 猫鼬:$addToSet不';不要检查重复项

Mongodb 猫鼬:$addToSet不';不要检查重复项,mongodb,mongoose,duplicates,Mongodb,Mongoose,Duplicates,你能看一下这个密码吗?我有复本 以下是模式: var Account = new Schema({ username: String, votes:[ { resId: String, upvoted:[String]

你能看一下这个密码吗?我有复本

以下是模式:

var Account = new Schema({
     username: String,
     votes:[
       {                                            
         resId: String,                                 
         upvoted:[String]                                                           
       }
     ]                                                                          
 });
我正在尝试将项目添加到投票中

var id = 'a';
var resId = 'b';

users.update({'_id':id},                
    {
         '$addToSet': {'votes': {'resId': resId}}
    }
);
问题是,在两次更新后,当我只需要一次更新时,我会得到两次更新:

[
 {
    'username': 'Fat Gandalf',
    'votes': [
       {
          '_id': objectID('11111111111111111111111'),
          'resId': 'b',
          'upvoted': []
       }
    ]
},
{
    'username': 'Fat Gandalf',
    'votes': [
       {
          '_id': objectID('2222222222222222222222'),
          'resId': 'b',
          'upvoted': []
       }
    ]
 }
]

为什么$addToSet不在这里检查复制?有解决办法吗?尝试了$push,但也不起作用。非常感谢

添加了“_id:”false;到模式,现在它工作得很好!由于“res”和“upvoted”是两个值,“两者”构成一个“集合”,因此这两个值的任何变化都是一个新条目。此外,mongoose会自动添加
\u id
,除非您为数组内容指定单独的模式并使用
{“\u id”:false}
选项。无论如何,您需要
$push
,并且您需要测试“resId”值是否存在,即
{“voates.resId”:{“$ne”:“b”},{“$push”:{“voates”:{“resId”:“b”,“upvoated”:[]}
。如果您仔细看,“upvoting”系统的示例很多。