如果数组存在则如何调用$ addToSet,如果它不然后在一个查询中调用$ set?

时间:2013-08-12 19:33:07

标签: node.js mongodb mongoose

嘿所以我试图设置一个mongodb文档中不存在的新数组,但我希望能够将其他文档抛出到数组中,而不必不断地替换这些值。

例如:

users {
    id: 'value1',
    name: {value2},
    friends: [
               {friendID: 'value x', type: 'valuey', TAGS: [tag1, tag2]}

             ]

基本上TAGS不存在,我想创建它并添加tag1,如果它确实存在,我想只将tag2添加到数组中......

这是为了理解上面示例中的变量与我在db中的变量:

friendStatus = friends,
fuId = friendID,
labels = TAGS

这是我的尝试:

Friend.findOneAndUpdate({userId: mongoose.Types.ObjectId(req.signedCookies.userid), 
'friendStatus.fuId': mongoose.Types.ObjectId(req.body.user)}, 
{$addToSet: {'friendStatus.$.labels': req.body.labelNew}}
    , function(err, userX) {    


}

2 个答案:

答案 0 :(得分:0)

目前无法使用MongoDB更新语法执行您想要的操作。

这是一个允许这样的功能:https://jira.mongodb.org/browse/SERVER-6566

答案 1 :(得分:-2)

你应该使用“upsert”标志:

Friend.update({userId:req.signedCookies.userid,'friendStatus.fuId':req.body.favourites},{$ addToSet:{'friendStatus。$。labels':req.body.labelNew}}, {upsert:true},function(err,item){...})

然而,'friendStatus。$。labels'说“我有多个friendStatuses,我希望这个操作适用于我的查询匹配的任何/所有这些操作”(至少,afaict) - 所以我这不适合你。http://docs.mongodb.org/manual/reference/operator/positional/(另见http://docs.mongodb.org/manual/core/update/上的upsert标志)