更新文档而不删除现有值

时间:2016-09-30 14:09:58

标签: mongodb mongoose

我有一个按对象id引用用户模型的电影模型。 用户可以在参加列表中添加或删除自己,我正在尝试使用mode.findOneAndUpdate实现它。 我读到我应该添加$ set,现有的参与用户不会被删除,但即使用$ set,当用户添加自己时,所有现有用户都被删除,现在这个用户是列表中唯一的用户。

以下是代码:

电影模特

{
    "_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; DR

如果您不介意在列表中重复,请使用$ push not $ set,或仅为唯一值使用$ addToSet。请参阅下面的答案和评论。

2 个答案:

答案 0 :(得分:3)

由于attending是一个数组,因此您应该使用$push

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

答案 1 :(得分:0)

我之前也遇到过这样的问题。当你找到一个并更新时使用set运算符,如下所示:



data




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