Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.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
Mongodb 排序和筛选双嵌套mongo数组_Mongodb_Aggregation Framework - Fatal编程技术网

Mongodb 排序和筛选双嵌套mongo数组

Mongodb 排序和筛选双嵌套mongo数组,mongodb,aggregation-framework,Mongodb,Aggregation Framework,我有一个类似于以下内容的数据库条目: name: "List 1" sections:[ order:0 name:"section 1" items : [Array visible:1 name: "Item 1" ], visible:0

我有一个类似于以下内容的数据库条目:

name: "List 1"
sections:[
        order:0
        name:"section 1"
            items : [Array
                visible:1
                name: "Item 1"
            ],
            visible:0
                name: "Item 2"
            ],
       
        order:0
        name:"section 2"
            items : [Array
                visible:1
                name: "Item 1"
            ],
            visible:1
                name: "Item 2"
            ]
            ...
我想在mongo中设计一个查询,让我

  • 根据
    部分对部分进行排序。排序
  • 过滤掉所有包含项目的项目。
    可见=1
    。到目前为止,我发现我可以使用像这样的展开来重新排列
    部分
    ,但我似乎不知道如何防止
    可见-1从结果中结束
  • 使用Mongo查询对部分进行排序:

    Record.aggregate([
        { $match: { name:name } },
        { $unwind: "$sections" },
       
        { $sort: { "sections.order": 1}, },
        {
          $group: {
            
            sections: { $push: "$sections" },
          },
        },
        {
          $project: {
            sections: "$sections",
          },
        },
      ])
    

    上面的查询将正确地对各部分进行排序,但我仍然会在其中得到
    可见的项目:0
    。您知道如何筛选出这些项目吗?

    添加一个新阶段,以按可见项筛选项目

    • $addFields
      $filter
      迭代
      项的循环,并按
      可见进行筛选!=1
    • $group
      \u id
      创建并构造节数组

    请添加有效的样本数据
    Record.aggregate([
      { $match: { name: name } },
      { $unwind: "$sections" },
      {
        $addFields: {
          "sections.items": {
            $filter: {
              input: "$sections.items",
              cond: { $ne: ["$$this.visible", 1] }
            }
          }
        }
      },
      { $sort: { "sections.order": 1 } },
      {
        $group: {
          _id: "$_id",
          name: { $first: "$name" },
          sections: { $push: "$sections" }
        }
      }
    ])