mongodb 聚合添加从另一个字段派生的字段

mongodb aggregation add field 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 
}

谁能帮我用猫鼬写这个查询?

您需要使用以下管道阶段和运算符的聚合操作:

  • $addFields: 向管道文档添加新字段
  • $objectToArray:将 object/document 转换为数组。这对于检查匹配数组元素的索引是必要的
  • $arrayElemAt:获取指定数组索引处的元素
  • $indexOfArray:获取指定值
  • 第一次出现的数组索引(zero-based)

您的最终管道应如下所示:

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

db.collection.aggregate([
    { $addFields: {
        data: {  $objectToArray:  data  },
    } },
    { $addFields: {
        data: {
            $arrayElemAt:  [
                '$data.v',
                {
                    $indexOfArray: [ 
                        '$data.k', 
                        {  $first: '$arr' } 
                    ] 
                }  
            ]
        }
    } }
])

db.collection.aggregate([
    { $addFields: {
        data: {  $objectToArray:  data  },
    } },
    { $addFields: {
        data: {
            $arrayElemAt:  [
                '$data.v',
                {
                    $indexOfArray: [ 
                        '$data.k', 
                        {  $arrayElemAt: ['$arr', 0] } 
                    ] 
                }  
            ]
        }
    } }
])

Mongo Playground