2014-09-26 55 views
0

我试图插入一个新的数组项到使用$ 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) { 

}); 

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

感谢

+1

你能在这里显示一些重复的结果吗? – Wizard 2014-09-27 00:18:59

回答

1

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

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

然后不管有多少次你addToSet对象数组LOCS:

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

只有第一个将被添加。

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

+0

呀您的示例工作正常,但我得到这个加到我每次在阵列 “_id”的地方项目:{ “$ OID”:“5428f2fe813693cc26803220” } } 我假设的事实是,数组包含对象 “位置”:[ { “地点”: “兰迪德诺”, “邮政编码”: “LL30”, “_id”:{ “$ OID”: “5428f2fe813693cc26803220” } }, ] – 2014-09-29 05:51:38

+0

@RobPaddock最有可能是猫鼬正在添加这个$ oid。不知道为什么它这样做(不熟悉猫鼬)。只需找出将其删除的方法即可。 – 2014-09-29 06:29:03

+0

是的,我不得不为它创建一个模式,并将_id设置为false。感谢您的帮助,尽管在终端上试用它可以很容易地跟踪问题。 – 2014-09-29 08:11:22

1

感谢您的帮助萨尔瓦多 似乎为我用猫鼬它添加_id,我需要创建数组子文档或新的架构和设置_id为false

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

所有工作现在好吧