首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >包含数组查询中当前对象位置的Mongodb聚合addField

包含数组查询中当前对象位置的Mongodb聚合addField
EN

Stack Overflow用户
提问于 2021-10-01 18:10:00
回答 1查看 241关注 0票数 0

在最后一个聚合管道之后,我接收到当前数组:

代码语言:javascript
复制
[{
    "cdrId": "61574b3e58fb1cae1494df2c",
    "date": "2021-10-01T17:54:06.057Z",
    "intentType": "FALLBACK"
},
{
    "cdrId": "61574b3e58fb1cae1494df2c",
    "date": "2021-10-01T17:54:06.057Z",
    "intentType": "FAQ"
},
{
    "cdrId": "61570b37522aba5e2f205356",
    "date": "2021-10-01T13:20:55.601Z",
    "intentType": "TRANS/DISAM"
},
{
    "cdrId": "61570b37522aba5e2f205356",
    "date": "2021-10-01T13:20:55.601Z",
    "intentType": "FAQ"
}]

我希望添加一个索引字段,显示对象在数组中的当前位置。输出将如下所示:

代码语言:javascript
复制
[{
    "index": 0,
    "cdrId": "61574b3e58fb1cae1494df2c",
    "date": "2021-10-01T17:54:06.057Z",
    "intentType": "FALLBACK"
},
{
    "index": 1,
    "cdrId": "61574b3e58fb1cae1494df2c",
    "date": "2021-10-01T17:54:06.057Z",
    "intentType": "FAQ"
},
{
    "index": 2,
    "cdrId": "61570b37522aba5e2f205356",
    "date": "2021-10-01T13:20:55.601Z",
    "intentType": "TRANS/DISAM"
},
{
    "index": 3,
    "cdrId": "61570b37522aba5e2f205356",
    "date": "2021-10-01T13:20:55.601Z",
    "intentType": "FAQ"
}]

如果下一个管道对这个数组进行排序,我将使用这个值。所以在分拣之前我有它原来的位置。

有什么办法能让我用聚合的方式做到这一点吗?我使用的是MongoDB 4.2。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-10-01 19:05:24

试试这个:

代码语言:javascript
复制
db.collection.aggregate([
  // {$sort: {...} },
  {
    $group: {
      _id: null,
      data: { $push: "$$ROOT" }
    }
  },
  {
    $unwind: {
      path: "$data",
      includeArrayIndex: "index"
    }
  },
  {
    $replaceRoot: {
      newRoot: { $mergeObjects: [ "$data", {index: "$index"} ] }
    }
  }
])

蒙戈游乐场

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/69410321

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档