Mongodb 在不删除现有值的情况下更新文档

Mongodb 在不删除现有值的情况下更新文档,mongodb,mongoose,Mongodb,Mongoose,我有一个电影模型,它通过对象id引用用户模型。 用户可以从出席列表中添加或删除自己,我正在尝试使用mode.findOneAndUpdate实现它。 我读到我应该添加$set,现有的参与用户不会被删除,但即使使用$set,当用户添加自己时,所有现有用户都会被删除,现在该用户是列表中唯一的用户 代码如下: 电影模型 { "_id" : ObjectId("fhdfdca5e1b94fafadhfg1"), "date" : ISODate("2016-10-05T13:56:43.

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

代码如下:

电影模型

{
    "_id" : ObjectId("fhdfdca5e1b94fafadhfg1"),
    "date" : ISODate("2016-10-05T13:56:43.939Z"),
    "attending" : [ 
        ObjectId("fhdf6d0e4501f294a6dgd2")
    ],
    "__v" : 0
}
以下是我的最新发现:

   ...
.findOneAndUpdate({_id:req.body.movieId}, {$set:{attending:req.body.imAttending}}, {upsert:true}) 
我如何简单地将一个项目添加到我的出席列表中

TL;博士


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

我以前也遇到过类似的问题。当您找到一个并进行更新时,请使用set运算符,如下所示:

modelname.findOneAndUpdate({
电子邮件:var_email},
{$set:{
代币:var_代币,
平台:var_platform},
{new:true},函数(err,doc)
{
//这里的文档已经更新了文档,以备您需要。

});由于
是一个数组,您应该使用:


这些只是对象内部的参数。我把它用在设备上。所以令牌和平台在我的mongodb对象中。对于你的职位,它将是身份证,日期,或出席太好了!我确信这就是我一直在寻找的,因为$set似乎不起作用,我怀疑数组中还有另一个操作符。所有操作员的列表在哪里?@S.Schenk有关更新操作员,请参阅。操作员的全局列表从开始。我注意到,即使添加了相同的用户,它也会不断将其添加到列表中。我试图通过在我的主治医生推荐名单上的“唯一”来阻止这种情况,但这并没有起作用。有什么线索吗?@S.Schenk使用。
.findOneAndUpdate({
  _id : req.body.dinnerId
}, {
  $push : { attending : req.body.imAttending }
}, ...)