Создание критерия запроса для поиска документов имеет нужный элемент внутри массива массива в MongoDB - PullRequest
0 голосов
/ 27 января 2019

Я реализую приложение с загрузкой Spring и впервые использую MongoDB в качестве базы данных.

Мне нужно создать критерии для запроса для MongoDB, однако я не знаю, как это сделать.Мой документ выглядит следующим образом:

...
"mylists" : [
               {
                    "subListName" : "Main",
                    "list" : [
                            {
                                    "name" : "abc",
                                    "amount" : "3"
                            },
                            {
                                    "name" : "adf",
                                    "amount" : "1"
                            },
                    ]
            },
            {
                    "subListName" : "Additional1",
                    "list" : [
                            {
                                    "name" : "xyz",
                                    "amount" : "1"
                            }, 
                            {
                                    "name" : "dbr",
                                    "amount" : "1"
                            }
                    ]
            }
        ],
...

Я хочу получить документы, в которых есть «abc» в одном из списков.Как вы можете видеть, массив mylists содержит 1 или более subList, а каждый subList снова содержит 1 или более объектов.

Для обычного 1d массива я могу создать такой запрос:

criteria.add(Criteria.where("list").in('abc'), "i"));

Мои списки также находятся в другом большом списке.Также abc находится в поле 'name'.Поэтому я не мог понять, как это сделать.

Любая помощь приветствуется.

1 Ответ

0 голосов
/ 28 января 2019

Используйте официальный драйвер MongoDB , и это просто.Я использую v. 3.8.2.Поскольку вы соответствуете только одному полю, вы можете использовать либо $elemMatch, либо просто найти напрямую.Вот примеры.

collection.find(elemMatch("mylists.list", eq("name", "abc")))

или

collection.find(eq("mylists.list.name", "abc"))

Для получения дополнительной информации ознакомьтесь с учебником Поиск операций .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...