首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >按计数排序并获取父节点属性

按计数排序并获取父节点属性
EN

Stack Overflow用户
提问于 2020-06-12 12:00:28
回答 1查看 25关注 0票数 1

假设我有这样的结构:

代码语言:javascript
复制
{
    "_id": "Henry IV",
    "acts": [
    {
        "_id": "ACT I",
        "scenes": [
        {
            "_id": "SCENE I. London. The palace.",
            "speeches": [
            {
                "_id": 1,
                "speaker": "KING HENRY IV",
                "lines": [
                {
                    "_id": "1.1.1",
                    "text": "So shaken as we are, so wan with care,"
                },
                {
                    "_id": "1.1.2",
                    "text": "Find we a time for frighted peace to pant,"
                },
                {
                    "_id": "1.1.3",
                    "text": "And breathe short-winded accents of new broils"
                }]
            },
            {
                "_id": 2,
                "speaker": "WESTMORELAND",
                "lines": [
                {
                    "_id": "1.1.34",
                    "text": "My liege, this haste was hot in question,"
                },
                {
                    "_id": "1.1.35",
                    "text": "And many limits of the charge set down"
                }]
            }]
        }]
    }]
}

如何获得按“行”计数排序的结果,以及如何获得父节点属性?理想的结果如下所示:

代码语言:javascript
复制
{'play': 'Henry IV', 'act': 'ACT I', 'scene': 'SCENE I. London. The palace.', 'speech', '1', 'speaker': 'KING HENRY IV', 'line_count': 3}

{'play': 'Henry IV', 'act': 'ACT I', 'scene': 'SCENE I. London. The palace.', 'speech', '2', 'speaker': 'WESTMORELAND', 'line_count': 2}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-06-12 18:36:41

您需要使用操作符将嵌套数组的扁平,并使用$project运算符将其转换为所需的输出,如下所示:

代码语言:javascript
复制
db.collection.aggregate([
  {
    $unwind: "$acts"
  },
  {
    $unwind: "$acts.scenes"
  },
  {
    $unwind: "$acts.scenes.speeches"
  },
  {
    $project: {
      _id: 0,
      play: "$_id",
      act: "$acts._id",
      scene: "$acts.scenes._id",
      speech: "$acts.scenes.speeches._id",
      speaker: "$acts.scenes.speeches.speaker",
      line_count: {
        $size: "$acts.scenes.speeches.lines"
      }
    }
  },
  //Add here your sorting condition
  {
    $sort: {
      act: 1,
      speech: 1,
      line_count: 1
    }
  }
])

MongoPlayground

注意:如果嵌套数组为空,则跳过文档。

皮蒙戈

代码语言:javascript
复制
from bson.son import SON
pipeline = [
     {"$unwind": "$acts" },
     ...
     {"$sort": SON([("act", 1), ("speech", 1), ("line_count", 1)])}
]
result = list(db.collection.aggregate(pipeline))
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62343869

复制
相关文章

相似问题

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