2017-06-02 38 views
1

我試圖更新集合中的文檔。我特別想更新以下Strings.The數組是我的架構問題在使用save()保存數據在貓鼬模型中的值

var sampleSchema= mongoose.Schema({ 

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

}); 

我基本上有這樣的架構的陣列。我想更新所有角色的rolesTaken數組。 所以我做了以下

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。但它似乎並不在我的case.When工作,我加入mongoose.debug我得到了以下

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

正如你所看到的,儘管我加入markmodified採取的角色是空的,保存()。我想知道是否我錯過了一些阻止我將模式中的值保存起來的事情。

在此先感謝。

回答

0

下面是我如何使用貓鼬將註釋推送到其中一個應用程序中的線程。

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

我只是找到該ID的線程,然後使用$推運營商推評論ID的評論屬性,我後來填充。

你可以閱讀到$推動運營商在這裏(貓鼬V3.4)https://docs.mongodb.com/manual/reference/operator/update/push/

+0

感謝您的回答。但不知何故,它似​​乎並沒有工作 – RBN

+0

@RBN你有什麼嘗試?你是如何實現它的? – Jordan

+0

當你告訴我更換我取代我的代碼下面的'ATmapping.findByIdAndUpdate(list._id,{$推:{rolesTaken:角色}},功能(ERR,項目){ \t \t \t \t \t \t的console.log (「推」,項目); \t \t \t \t \t});',其中通過使用async.each – RBN