【问题标题】:How to aggregate on nested embedded object in MongoDB如何聚合 MongoDB 中的嵌套嵌入对象
【发布时间】:2022-01-22 23:19:27
【问题描述】:
{
  "_id": 1,
  "title": {
    header1:{ "name":"A" , age:10, "active":true},
    header2:{ "name":"B" , age:15, "active":false},
    header3:{ "name":"C" , age:20, "active":true},
    header4:{ "name":"D" , age:30, "active":true},
    header5:{ "name":"E" , age:35, "active":false},
    header6:{ "name":"F" , age:40, "active":true},
    header7:{ "name":"G" , age:45, "active":false},
  }
}

如何只显示那些 active 值为 false 的标题?

【问题讨论】:

    标签: python mongodb mongoose aggregation-framework pymongo


    【解决方案1】:
    1. $project

      1.1 通过$objectToArrayheaders 字段将键值对转换为数组。 1.2 $filter$$this.v.activefalse

    2. $project

      2.1 通过$arrayToObjectheaders 转换为键值对并赋值给title 字段。

    db.collection.aggregate([
      {
        $project: {
          _id: 1,
          headers: {
            $filter: {
              "input": {
                $objectToArray: "$title"
              },
              "cond": {
                "$eq": [
                  "$$this.v.active",
                  false
                ]
              }
            }
          }
        }
      },
      {
        $project: {
          _id: 1,
          title: {
            "$arrayToObject": "$headers"
          }
        }
      }
    ])
    

    Sample Mongo Playground

    【讨论】:

      猜你喜欢
      • 2015-03-10
      • 2021-02-13
      • 2018-09-10
      • 2021-03-13
      • 2017-07-26
      • 2021-07-20
      • 1970-01-01
      • 2021-08-13
      • 2020-04-23
      相关资源
      最近更新 更多