Получение данных из вложенных массивов на два уровня на основе субиндекса - PullRequest
0 голосов
/ 28 мая 2020

У меня есть эта json схема

"header": {
        "self": {},
        "items": [
            {
                "_id": "5ec7e61979ec9914ecefc539",
                "title": "Test",
                "root": "true",
                "alignment": "left",
                "page": "test",
                "translate": "",
                "toggle": "",
                "icon": "",
                "IsActive": 1,
                "submenu": [
                    {
                        "_id": "5ece913a353a71309084768d",
                        "title": "Sub Test",
                        "bullet": "dot",
                        "page": "test",
                        "translate": "MENU.TEST1",
                        "icon": "flaticon-stes-3",
                        "IsActive": 1
                    },
                    {
                        "_id": "5ece935d79972f0390997179",
                        "title": "Sub Test",
                        "bullet": "dot",
                        "page": "test",
                        "translate": "MENU.TEST2",
                        "icon": "flaticon-stes-3",
                        "IsActive": 1
                    }
                ]
            }
        ]
    }

// Index based on a previous query
this.db.collection('AssetData').find({"header.items.$.submenu.[0]._id":ObjectID("5ece913a353a71309084768d"));

//Tried with elemMatch
this.db.collection('AssetData').find(
                                {
                                "header.items": {
                                    $elemMatch:{
                                        "submenu": {
                                            $elemMatch:{
                                            "_id":ObjectID("5ece913a353a71309084768d")
                                            }
                                        }
                                    }
                                }
                               });

И я хочу получить один из данных объекта подменю на основе _id из подменю, но у меня возникают проблемы с его получением.

Я не уверен, смогу ли я использовать индекс второго массива из другого запроса для получения данных, или есть другой способ, который мне не хватает, например, соответствие elem.

Я использую MongoDB 3.5.6.

Как лучше всего это получить?

1 Ответ

0 голосов
/ 28 мая 2020
// Index based on a previous query
this.db.collection('AssetData').find({"header.items.$.submenu.[0]._id":ObjectID("5ece913a353a71309084768d")});

//Tried with elemMatch
this.db.collection('AssetData').find(
                                {
                                "header.items": {
                                    $elemMatch:{
                                        "submenu": {
                                            $elemMatch:{
                                            "_id":ObjectID("5ece913a353a71309084768d")
                                            }
                                        }
                                    }
                                }
                               }).exec(function(err, item) {
console.log(item);
// here you can retrieve the stock from item, as you wish
                               });

надеюсь, это вам поможет

...