2016-09-30 68 views
1

我有通过对象ID引用用户模型的电影模型。 用户可以添加或从参与列表中删除自己,我试图使用mode.findOneAndUpdate来实现它。 我读过,我应该添加$设置现有参加用户不会被删除,但即使用$设置时,用户添加自己所有的现有用户都将被删除,现在这个用户是唯一的名单上。在不删除现有值的情况下更新文档

下面的代码:

电影模式

{ 
    "_id" : ObjectId("fhdfdca5e1b94fafadhfg1"), 
    "date" : ISODate("2016-10-05T13:56:43.939Z"), 
    "attending" : [ 
     ObjectId("fhdf6d0e4501f294a6dgd2") 
    ], 
    "__v" : 0 
} 

这里是我的findandupdate:

... 
.findOneAndUpdate({_id:req.body.movieId}, {$set:{attending:req.body.imAttending}}, {upsert:true}) 

如何,我只是一个项目添加到我的出席名单?

TL;如果你不介意在你的名单重复或$ addToSet为唯一的值DR

使用$推不设置$。请参阅下面的答案和评论。

回答

3

由于attending是一个数组,你应该使用$push

.findOneAndUpdate({ 
    _id : req.body.dinnerId 
}, { 
    $push : { attending : req.body.imAttending } 
}, ...) 
+0

太棒了!我肯定这就是我所寻找的,因为$集合似乎没有工作,我怀疑还有另外一个数组运算符。所有运营商的名单在哪里? –

+0

@ S.Schenk查看[this list](https://docs.mongodb.com/manual/reference/operator/update/#id1)获取更新操作符。全球运营商名单从[here]开始(https://docs.mongodb.com/manual/reference/operator/)。 – robertklep

+0

我注意到,即使添加了相同的用户,它仍然会将相同的用户添加到列表中。我试图阻止在我参加的参考清单上的独特权利,但这并不奏效。任何线索? –

0

我以前也有类似的问题。当你发现一个和更新使用集合运算符,像这样:

modelname.findOneAndUpdate({ 
 
    email: var_email}, 
 
    { $set: { 
 
    token: var_token, 
 
    platform: var_platform}}, 
 
    { new: true }, function(err, doc) 
 
{ 
 
    //doc here has updated document, in case you need it. 
 
});

它看起来有种类似于您发布的内容。但它应该采用一些参数并将它们设置为当前对象。如果这对您尝试的内容不正确。下面评论。

+0

这些只是参数的对象内。我用它来设备。所以令牌和平台在我的mongodb对象内。对于你的位置,这将是ID,日期或参加 –

相关问题