Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Json MongoDB reduce嵌套_Json_Mongodb - Fatal编程技术网

Json MongoDB reduce嵌套

Json MongoDB reduce嵌套,json,mongodb,Json,Mongodb,我有一个类的集合,看起来像这样: [ { "_id": 1, "title": "dummy title", "assignments": [ { "_id": 1, "name": "a1", "members": [

我有一个类的集合,看起来像这样:

[
  {
    "_id": 1,
    "title": "dummy title",
    "assignments": [
        {
            "_id": 1,
            "name": "a1",
            "members": [
               {
                   "_id": 11,
                   "full_name": "john doe",
                   "aga": 18
               },
               {
                   "_id": 12,
                   "full_name": "john doe2",
                   "aga": 18
               } 
            ]
        }
    ],
    "settings": [
      {
        "type": "light",
        "status": "enabled"
      },
      {
        "type": "flare",
        "status": "disabled"
      },
      {
        "type": "toolbar",
        "status": "enabled"
      }
    ]
  }
]
{
    "_id": 1,
    "title": "dummy title",
    "assignments": [
        {
            "_id": 1,
            "name": "a1",
            "member_ids": [11, 18]
        }
    ],
    "active_settings": ["light", "toolbar"]
  }
我这里有两个嵌套文档“assignments”,其中有一个嵌套的“members” 和“设置”。我想要的结果应该是这样的:

[
  {
    "_id": 1,
    "title": "dummy title",
    "assignments": [
        {
            "_id": 1,
            "name": "a1",
            "members": [
               {
                   "_id": 11,
                   "full_name": "john doe",
                   "aga": 18
               },
               {
                   "_id": 12,
                   "full_name": "john doe2",
                   "aga": 18
               } 
            ]
        }
    ],
    "settings": [
      {
        "type": "light",
        "status": "enabled"
      },
      {
        "type": "flare",
        "status": "disabled"
      },
      {
        "type": "toolbar",
        "status": "enabled"
      }
    ]
  }
]
{
    "_id": 1,
    "title": "dummy title",
    "assignments": [
        {
            "_id": 1,
            "name": "a1",
            "member_ids": [11, 18]
        }
    ],
    "active_settings": ["light", "toolbar"]
  }
也就是说,在每个“分配”中,我应该只返回成员的ID,而不返回整个成员数据。在设置中,我应该只返回设置为“活动”的设置

可能吗

游乐场: 你可以试试

  • 使用
    $map
    $reduce
  • 使用
    $reduce

您可以尝试使用
$map
逐个执行
$mergeObjects
帮助将输出值与同一对象合并

[
  {
    $project: {
      title: 1,
      assignments: {
        $map: {
          input: "$assignments",
          in: {
            $mergeObjects: [
              "$$this",
              {
                members: {
                  $map: {
                    input: "$$this.members",
                    in: "$$this._id"
                  }
                }
              }
            ]
          }
        }
      },
      active_settings: {
        $reduce: {
          input: "$settings",
          initialValue: [],
          in: {
            $cond: [
              {
                $eq: [
                  "$$this.status",
                  "enabled"
                ]
              },
              {
                $setUnion: [
                  "$$value",
                  [
                    "$$this.type"
                  ]
                ]
              },
              "$$value"
            ]
          }
        }
      }
    }
  }
]
工作