收藏
回答

请问如何批量更新合集中所有记录中数组里所有符合条件的元素?

比如说有合集test如下共有2000条记录:

[
  {
    "_id": "1",
    "myArray": [
      {
        "no": 1,
        "status": 0,
        "type": 1
      },
      {
        "no": 2,
        "status": 2,
        "type": 1
      },
      {
        "no": 3,
        "status": 0,
        "type": 2
      },
      {
        "no": 4,
        "status": 0,
        "type": 1
      }
    ]
  },
  {
    "_id": "2",
    "myArray": [
      {
        "no": 1,
        "status": 0,
        "type": 1
      },
      {
        "no": 2,
        "status": 2,
        "type": 1
      },
      {
        "no": 3,
        "status": 0,
        "type": 1
      }
    ]
  },
  {
    "_id": "3",
    "myArray": [
      {
        "no": 1,
        "status": 0,
        "type": 2
      },
      {
        "no": 2,
        "status": 2,
        "type": 1
      },
      {
        "no": 3,
        "status": 0,
        "type": 1
      }
    ]
  },
  ...
  {
   "_id": "2000",
    "myArray": [
      {
        "no": 1,
        "status": 0,
        "type": 1
      },
      {
        "no": 2,
        "status": 1,
        "type": 1
      },
      {
        "no": 3,
        "status": 0,
        "type": 2
      }
    ]
  }
]

需求是把合集里所有记录里data数组中type=1,status=0更新为status=4,请问如何实现?

试了.where().update()都无法实现

使用.aggregate()只能输出聚合结果无法更新内容

db.collection('test')
      .aggregate()
      .project({
        myArray: $.filter({
          input: '$myArray',
          as: 'item',
          cond: $.and([$.eq(['$$item.type',1]), $.eq(['$$item.status', 2])])
        })
      })
      .end()
      .then(res =>{
        console.log(res)
      })
最后一次编辑于  2020-03-23
回答关注问题邀请回答
收藏

3 个回答

  • Adida Lee
    Adida Lee
    2021-05-23

    有解决方案了吗?老铁。。。

    2021-05-23
    有用
    回复
  • 雪线
    雪线
    2021-03-19

    可以试试先把这些符合条件的查询出来,知道数组下标以后,用拼接字符串的形式,再update回去

    2021-03-19
    有用
    回复
  • 老张
    老张
    2020-03-23


    db.collection('chatroom').where({
      myArray: _.elemMatch({
        type: 1,
        status: 0,
      })
    }).update({
      data: {
        "myArray.$.status": 4,
      }
    })
    
    
    2020-03-23
    有用
    回复 5
    • 杜。
      杜。
      2020-03-23
      这个之前试过了.他只能更新每条记录里数组1个元素.
      比如说
      2020-03-23
      回复
    • 杜。
      杜。
      2020-03-23
      2020-03-23
      回复
    • 老张
      老张
      2020-03-24回复杜。
      是有这个问题。你去mongo找办法吧,如果有,再看看云开发是不是支持。。。
      http://www.imooc.com/wenda/detail/558748
      2020-03-24
      1
      回复
    • 杜。
      杜。
      2020-03-24回复老张
      感谢回复,我找找看
      2020-03-24
      回复
    • Diracocean
      Diracocean
      2020-11-16回复杜。
      解决了吗,楼主
      2020-11-16
      回复
登录 后发表内容
问题标签