mongodb 在派生自另一个字段的所有文档中添加字段

mongodb add field in all documents derived from another field

这是我需要添加到集合中的数据

let data = {
    'a':'data a',
    'ab':'data a',
    'b':'data b',
    'c':'data c'
}

这是我收集的数据:

{
    name:'xyz',
    age:'100',
    arr: ['a','ab']
}

我想要的:

{
    name:'xyz',
    age:'100',
    arr: ['a','ab'],
    data:'data a' //get this from arr first element, and that is key in data object that's value here 
}

有人可以帮助我编写此查询以在所有文档中添加新字段吗?

get query for same 但是,这次我想在所有文档中插入数据。

只能在更新中添加聚合查询。

db.collection.update({},[
  {
    '$addFields': {
      'data': {
        '$objectToArray': {
          'a': 'data a', 
          'ab': 'data a', 
          'b': 'data b', 
          'c': 'data c'
        }
      }
    }
  }, {
    '$addFields': {
      'data': {
        '$arrayElemAt': [
          '$data.v', {
            '$indexOfArray': [
              '$data.k', {
                '$first': '$arr'
              }
            ]
          }
        ]
      }
    }
  }
], {multi:true})

如果您需要更新多个文档,那么您必须通过 {multi:true}.

db.collection.update({},
[
  {
    $set: {
      data: {
        $objectToArray: {
          "a": "data a",
          "ab": "data a",
          "b": "data b",
          "c": "data c"
        }
      }
    }
  },
  {
    $set: {
      index: { $indexOfArray: [ "$data.k", { $first: "$arr" } ] }
    }
  },
  {
    $set: {
      data: {
        $cond: {
          if: { $eq: [ "$index", -1 ] },
          then: null,
          else: { $arrayElemAt: [ "$data.v", "$index" ] }
        }
      }
    }
  },
  {
    $unset: "index"
  }
],
{
  multi: true
})

mongoplayground