MongoDB-将嵌入式文档中的行解压缩到自己的列中

量子蜜蜂

问题

所以我有一个MongoDB文档,看起来像这样:

Awards


    [
      {
        "year": "2017",
        "winners": [
          {
            "name": "james",
            "id": 1
          },
          {
            "name": "adam",
            "id": 2
          }
        ]
      },
      {
        "year": "2018",
        "winners": [
          {
            "name": "mary",
            "id": 3
          },
          {
            "name": "jane",
            "id": 4
          }
        ]
      }
    ]

而且我基本上是在尝试扩大每年的获奖者,以便使纲要大致成为(year, winner_id)我以后可以将其用于计划参加的工作。像这样:

[
   {
     "year":"2017",
     "winner_id":1
   },   
   {
     "year":"2017",
     "winner_id":2
   }, 
   {
     "year":"2018",
     "winner_id":3
   },
   {
     "year":"2018",
     "winner_id":4
   }
]

我尝试过的

如此直观地讲,我在寻找类似的东西$unwind,但问题是那winners不是数组。

  • 我尝试过,db.awards.aggregate({'$unwind':'$winners.id'})但是没有用。(结果为空)

  • 所以后来我想,db.awards.aggregate({'$unwind': {'$objectToArray':'$winners.id'}})但这也不起作用。(出现错误)

  • 根据这篇文章,我应该这样做:

db.awards.aggregate(
 { '$project': {
    _id: 1,
    'winners': 1
  } },
{'$unwind': '$winners'},
{'$unwind': '$winners.id'}
)

但是即使这样也行不通,我仍然获得了每个文档的嵌入文档 winner

有什么想法吗?

托马斯

您的数据是无效的JSON。假设该winners属性很可能是一个数组。

我可以在聚合命令中看到三个其他问题:

  1. 您还应该将聚合管道作为数组传递给该aggregate函数。
  2. $project聚合管道中的语法不同。您没有定义应包括哪些字段。您确实定义了实际的映射
  3. 我不明白您为什么要取消获奖者ID。展开的属性应该是一个数组,在您的示例中只有winners数组。

我认为做$unwind投影前比较容易

db.awards.aggregate(
  [
    {
      $unwind: { path: '$winners' }
    },
    {
      $project: {
        year: '$year',
        winner_id: '$winners.id'
      }
    }
  ]
);

蒙哥运动场

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Spring Data MongoDB-嵌入式文档在其他文档中作为参考

将嵌入式文档插入到mongodb文档中的新字段

更新Mongodb中的嵌入式文档:性能问题?

通过MongoDB中的聚合框架将嵌入式对象作为文档检索

mongodb聚合中的项目嵌套嵌入式文档

基于范围查询MongoDB中嵌入式文档的数组

将嵌入式文档数组转换为mongoDB中的元素数组

如何在mongodb中搜索嵌入式文档?

查询Spring Data MongoDB中嵌入式文档的数组

在MongoDB中的多个文档中更新多个嵌入式文档

更新mongodb中arrays对象的arrays的嵌入式文档

如何从嵌入式文档数组将mongodb中的ISO日期转换为'yyyy-mm-dd hh:mm:ss'?

嵌入式文档数组中的MongoDB Aggregate ObjectId

$ slice在mongoDB中的嵌入式文档中不起作用

如何在嵌入式数组mongodb中查询嵌入式文档

在mongodb中更新嵌套的嵌入式文档

确保mongodb中嵌入式文档中的唯一索引

如何使用Mongoose将值推入MongoDB中嵌入式文档中的数组?

查询MongoDB中的嵌入式文档

在文档中引用文档的嵌入式数组的嵌入式数组上查询Doctrine2和MongoDB

php:将mongodb嵌入式文档查询到数组中

映射-Symfony2中的Mongodb嵌入式文档

使用python(pymongo)在mongodb中编辑嵌入式文档

在mongodb中展开嵌入式文档

使用C#在MongoDB集合中的嵌入式文档的子句查询中的投影

Mongodb:将字段添加到嵌入式文档中(无数组)

如何将现有的子文档推送到MongoDB中的嵌入式数组中?

如何在 MongoDb 中查询嵌入式文档?

在 MongoDB 中搜索嵌入式文档?