Запрос для глубоко вложенного массива в mongodb - PullRequest
0 голосов
/ 26 сентября 2018

Как запросить глубоко вложенные документы, например, шоу на изображении ниже.

enter image description here

Здесь columns - это массив неизвестного размера.Каждый элемент в столбце содержит record, который снова является массивом.Каждый элемент массива record содержит массив с именем fields.Каждая запись в field содержит 2 клавиши, которые называются name и value.

Я запрашиваю name самого внутреннего массива (в массиве полей).Я не мог подняться выше уровня 1 порядка вложенности.

JSON документ вышеупомянутого изображения

"data" : {
        "columns" : [
            {
                "name" : "styleId", 
                "record" : [
                    {
                        "fname" : "column_mapping", 
                        "_id" : ObjectId("5ba488c79dc6d62c90257752"), 
                        "fields" : [
                            {
                                "name" : "column_mapping_form", 
                                "value" : "styleId"
                            }
                        ], 
                        "rules" : [
                            [

                            ]
                        ]
                    }
                ]
            }, 
            {
                "name" : "vendorArticleNumber", 
                "record" : [
                    {
                        "fname" : "column_mapping", 
                        "_id" : ObjectId("5ba488c79dc6d62c90257753"), 
                        "fields" : [
                            {
                                "name" : "column_mapping_form", 
                                "value" : "vendorArticleNumber"
                            }
                        ], 
                        "rules" : [
                            [

                            ]
                        ]
                    }
                ]
            }, 
            {
                "name" : "vendorArticleName", 
                "record" : [
                    {
                        "fname" : "column_mapping", 
                        "_id" : ObjectId("5ba488c79dc6d62c90257754"), 
                        "fields" : [
                            {
                                "name" : "column_mapping_form", 
                                "value" : "vendorArticleName"
                            }
                        ], 
                        "rules" : [
                            [

                            ]
                        ]
                    }
                ]
            }
}

Какие могут быть решения, если существует такой тип вложенности?

1 Ответ

0 голосов
/ 26 сентября 2018
db.collection.find("data.columns.record.fields.name" : "column_mapping_form")

будет соответствовать всем документам, где хотя бы один элемент из columns имеет хотя бы один record и хотя бы один field, где name - это "column_mapping_form".

https://docs.mongodb.com/manual/tutorial/query-array-of-documents/ имеет очень хорошее объяснение, примеры и интерактивную оболочку для игры.

...