2015-02-11 153 views
0

我是MongoDB的新手,我有一個組織的MongoDB集合。並有classes (object)陣列。我目前在Mongoose上使用Node.js來更新教室內的教師count。目前的收藏如下。如何更新Mongoose中的對象內數組內的對象?

//organization 
{ 
"_id" : ObjectId("54db07ab12545794bf7c2d1b"), 
"name" : 「Stackoverflow」, 
"classes" : [ 
    { 
     "name" : 「Stack 01」, 
     "_id" : ObjectId("54db07ab12545794bf7c2d1f"), 
     "teachers" : [ 
      { 
       "idUser" : "54d1e8fe14a880bea6288eb6", 
       "locked" : false, 
       "count" : 0, 
      }, 
      { 
       "idUser" : "54d321cb190c919759b8a8bb", 
       "locked" : false, 
       "count" : 0, 
      }, 
      { 
       "idUser" : "54d32147ceaa3a665958b096", 
       "locked" : true, 
       "count" : 0, 
      } 
     ] 
    }, 
    { 
     "name" : 「Stack 02「, 
     "_id" : ObjectId("54db07ab12545794bf7c2d1c"), 
     "teachers" : [ 
      { 
       "idUser" : "54d1e8fe14a880bea6288eb6", 
       "locked" : false, 
       "count" : 0, 
      }, 
      { 
       "idUser" : "54d32147ceaa3a665958b096", 
       "locked" : true, 
       "count" : 0, 
      } 
     ] 
    } 
] 
} 

我想通過Mongoose更新組織時增加老師的人數。我是這樣寫的。

Organization.findOneAndUpdate(
    {_id: "54db07ab12545794bf7c2d1b", 
    "classes._id": "54db07ab12545794bf7c2d1f"}, 
    { 
     $inc: {"classes.$.teacher.$.count": 1} 
    },function(err, org){}); 

請幫助我如何查詢和增加老師的人數。

+0

,我認爲它會爲單個子集 – 2015-02-11 08:49:01

+0

舉例來說,我只是想增加教師ID的數量與'54d1e8fe14a880bea6288eb6'更新後更新。 – Khay 2015-02-11 08:50:05

回答

1

您可以手動檢索它並在javascript級別進行操作,然後將其保存爲模型。

var query = {_id: "54db07ab12545794bf7c2d1b"} 

Organization.findOne(query,function(err, org){ 

     var classes = org.classes; 
     var index = null; 

     for (var i in classes) { 
      if (class[i]._id === ObjectID("54db07ab12545794bf7c2d1f")) { 
       var index = i; 
       break; 
      } 
     } 

     var teachers = org.classes[index].teachers; 

     for (i in teachers) { 
     if (teachers[i].idUser === '54d1e8fe14a880bea6288eb6') { 
      teachers[i].count++; 
     }  
     } 

     org.classes[index].teachers = teachers; 
     org.save(); 

});