我的数据具有多个嵌套级别:根->块->子级-> “字符串数组”
我想使用$ 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
答案 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"
}
}
]` )