mongodb $ unwind与三个嵌套数组

时间:2018-12-20 06:10:28

标签: mongodb mongodb-query

我的数据具有多个嵌套级别:根->块->子级-> “字符串数组”

我想使用$ unwind聚合来从 “块”级别和最低级别的“字符串数组”。

我的问题:根据下面的数据图,使用$ unwind聚合来输出这些字段的代码是什么?

Fields from BLOCKS
   block_id
   block_type  
   definition   
All entries from the lowest level array of strings 

这与我发现的其他帖子不同,因为我想要某些级别而跳过其他级别,也因为较低的两个级别没有名称。

输出中的重复行不是首选,但我可以在稍后阶段进行重复数据删除。

我上传了数据结构的图像。如果可以看到图像,则我想要的字段周围会出现一个蓝色框。

Using "MongoDB Compass", I can see this structure  
ROOT ARRAY
 _id
 edited_on
    -->BLOCKS ARRAY (array of type object)
         block_id
         block_type
         definition
         edit_info (object)
            edited_on
         fields (object)
            display_name
            -->CHILDREN ARRAY (array of type array)
               -->ARRAY (array of type string)
                  0: string
                  1: string

前两个数组的名称分别为“ blocks”和“ children”。最后两个数组没有名称。

这可能会有所帮助。我已经有一个带有$ unwind的查询,该查询为我提供了root和blocks级别的一些字段。

  

mongo.exe MyDatabase --quiet --eval“ printjson(db.modulestore.structures.aggregate({$ unwind:'$ blocks'},{$ project:{_id:1,edited_on:1,'definition' :'$ blocks.definition','block_type':'$ blocks.block_type','block_id':'$ blocks.block_id','block_edited_on':'$ blocks.edit_info.edited_on','display_name':'$ blocks .fields.display_name'}},{$ match:{block_type:'openassesssment'}}).toArray())“> C:\ Data \ MyOutput.json

1 个答案:

答案 0 :(得分:0)

不清楚您的期望,我想这可能对您有帮助

     `db.modulestore.structures.aggregate([
  {
    "$unwind": "$blocks"
  },
  {
    "$unwind": "$fields.children"
  },
  {
    "$project": {
      "_id": 1,
      "edited_on": 1,
      "definition": "$blocks.definition",
      "block_type": "$blocks.block_type",
      "block_id": "$blocks.block_id",
      "block_edited_on": "$blocks.edit_info.edited_on",
      "display_name": "$blocks.fields.display_name"
    }
  },
  {
    "$match": {
      "block_type": "openassessment"
    }
  }
]` )