MongoDB:更新数组中的两个嵌套项目

时间:2019-02-16 07:46:47

标签: javascript mongodb mongoose

我有一个这样的对象结构:

{
  "_id" : ObjectId("4faaba123412d654fe83hg876"),
  "user_id" : 123456,
  "total" : 100,
  "courses" : [
    {
      name: 'tech',
      data: [
        { active: false, blabla: []},
        { active: false, blabla: []},
        { active: true /*change to false*/, blabla: [/* add item here*/]}
      ]
    }
  ]
}

,我的目标是更新这两个字段active并将内容推入blabla数组中。这些东西嵌套在data数组中。

我的尝试是过滤以tech作为值(也是一个目标)的课程名称,找到active = true,然后进行更新。

代码如下:

db.getCollection('users').update({
        "courses.name" : 'tech',
        "courses.data.active" : true
}, {$set : {"courses.$.data.active" : false}}, {$push : {"courses.$.data.blabla": 1}})

我得到的是:

Cannot create field 'active' in element {data: [ { active: ...

我想实现的是:

data: [
        { active: false, blabla: []},
        { active: false, blabla: []},
        { active: FALSE , blabla: [1]}
      ]

我正在使用Mongodb的4.0.2版。

0 个答案:

没有答案