Mongo $ addToSet仍然插入尽管数组中的项目存在

时间:2014-09-26 23:21:26

标签: mongodb mongoose

我正在尝试使用$ addToSet将新数组项插入到对象数组中,因为我不需要重复项

    var location = {
    place : req.body.location.Place,
    postcode : req.body.location.Postcode
}
User.update({_id: req.body._id},
         {$addToSet: { 'locations' : location}}, function(err, data) { 

});

即使地点和邮政编码完全匹配,也会每次都插入一条记录。

由于

2 个答案:

答案 0 :(得分:1)

我认为你的结果不一样(它们看起来可能相同,但却有不可见的字符)。例如:

db.a.insert({_id : 1, locs: []});

然后无论多少次将toToSet对象添加到数组locs:

db.a.update({_id : 1},{$addToSet : {
   locs: {a : 1, b: 2}
}})

只会添加第一个。

所以看一下你在添加什么,然后尝试做一个原始的mongo shell尝试。如果它无法正常工作,请在此处发布。否则,请更准确地查看您的应用为mongo提供的数据。

答案 1 :(得分:1)

感谢您的帮助萨尔瓦多 看来我正在使用Mongoose它添加了_id,我需要为数组创建一个subDocument或新架构并将_id设置为false

locations : [new mongoose.Schema(
    { 
        place : String,
        postcode : String
    },
    { _id: false})
]

现在一切正常