简体   繁体   English

带有数组索引值的MongoDB聚合推送

[英]Mongodb aggregate push with index value of array

I am stucked in one aggregate query, Following is my data我被困在一个聚合查询中,以下是我的数据

Let database = [
{
 _id: 'fefesf', name: 'John', info: {date: ISODate(), marks: '12'}
},
{
 _id: 'uiuioo', name: 'John', info: {date: ISODate(), marks: '15'}
},
{
 _id: 'erygbo', name: 'Ben', info: {date: ISODate(), marks: '18'}
}]

and my aggregate query is我的汇总查询是

var query = [{
  $group: {
   _id: '$name',
   Marks: {
     $push: {
       x: '$index',  ..............(not working right now)
       y: '$info.marks'
     }
   }
 }
}]

Is it possible to get index of grouped document as 'x' while pushing it in 'Marks' array.是否可以在将分组文档的索引推入“Marks”数组时将其索引为“x”。 Like Output should be像输出应该是

[
 {_id: 'John', Marks: [{x: 1, y: 12}, {x: 2, y: 15}]},
 {_id: 'Ben',{x: 1, y: 18}}
] 

Thanks in advance.!提前致谢。!

Since mongoDB version 3.6 you can use $reduce for that*:从 mongoDB 3.6 版开始,您可以使用$reduce *:

db.collection.aggregate([
  {
    $group: {
      _id: "$name",
      Marks: {$push: {y: "$info.marks"}}
    }
  },
  {$project: {
      Marks: {
        $reduce: {
          input: "$Marks",
          initialValue: [],
          in: {$concatArrays: [
              "$$value",
              [
                {
                  y: "$$this.y",
                  x: {$add: [{$size: "$$value"}, 1]}
                }
              ]
            ]
          }
        }
      }
    }
  }
])

See how it works on the playground example看看它在操场上的例子是如何工作的

*Inspired by this answer *受此答案启发

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM