This question already has answers here:
Push items into mongo array via mongoose
                                
                                    (5个答案)
                                
                        
                                2年前关闭。
            
                    
我正在尝试更新集合中的文档。我特别想更新一个字符串数组。以下是我的模式

var sampleSchema= mongoose.Schema({

        fullName   : String,
        email      : String,
        rolesTaken : [String],

});


我基本上有这样的模式的数组。我想为所有这些对象更新roleTaken数组。
所以我做了以下

    var async = require('async');
    var ATmapping = require('path to Schema');

    ATmapping.find({},function(err,lists){
     if(err){
         console.log(err);
         return;
     }
     if(lists.length > 0){
      async.each(lists,function(list,callback){
        if(!list.rolesTaken){
              list.rolesTaken =[];
        }
       list.rolesTaken.push("Patient");
       list.markModified('rolesTaken');
       list.save(function(err,item){
            if (err){
                console.log(err);
            }

            console.log('Saved', item);
            callback();
       });
      });
     }
   });


我浏览了很多,最受欢迎的解决方案是添加markModified。但这似乎不适用于我的情况。当我添加mongoose.debug时,我得到了以下内容

atmappings.update({ _id: ObjectId("59074b127adeef0004b84ac3"), __v: 7 }, { '$set': { rolesTaken: [] }, '$inc': { __v: 1 } })


如您所见,尽管我添加了markmodified和save(),但是所担任的角色是空的。我想知道是否丢失了阻止我将值保存在架构中的内容。

提前致谢。

最佳答案

这是我如何使用猫鼬在一个应用程序中的线程上添加评论的方法。

Thread.findByIdAndUpdate(body.thread, { $push: { comments: comment.id }})


我只是通过id查找线程,然后使用$ push运算符将注释id推送到我稍后填充的comment属性。

您可以在此处($ v3.4)进一步阅读$ push运算符。https://docs.mongodb.com/manual/reference/operator/update/push/

关于node.js - 使用save()在 Mongoose 模型中将值保存在数组中的问题,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/44320848/

10-16 13:39
查看更多