【问题标题】:How to update object inside array inside object in Mongoose?如何在 Mongoose 中的对象内更新数组内的对象?
【发布时间】:2015-02-11 17:18:01
【问题描述】:

我是 MongoDB 新手,我有一个 组织 的 MongoDB 集合。还有classes (object)的数组。我目前正在使用 Node.js 和 Mongoose 来更新课堂内教师的count。当前收藏如下。

//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){});

请帮助我如何查询和增加老师的数量。

【问题讨论】:

  • 我认为它会为单个子集合更新
  • 例如,我只想在更新后增加54d1e8fe14a880bea6288eb6的教师ID的计数。

标签: node.js mongodb mongoose


【解决方案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();

});

【讨论】:

    猜你喜欢
    • 2021-11-27
    • 2019-05-25
    • 2020-04-20
    • 2021-07-21
    • 2018-06-30
    • 1970-01-01
    • 2018-02-21
    • 2023-01-24
    • 2018-04-12
    相关资源
    最近更新 更多