Я только начал изучать MongoDB и не могу найти решение для моей проблемы.Проекция многомерного массива MongoDB
Получил этот документ:
> db.test.insert({"name" : "Anika", "arr" : [ [11, 22],[33,44] ] })
Пожалуйста, обратите внимание на поле «аранжировка», который представляет собой многомерный массив.
Теперь я ищу запрос, который возвращает только значение arr [0] [1], которое равно 22. Я пытался добиться этого, используя $ slice, однако я не знаю, как обращаться ко второму с этим.
> db.test.find({},{_id:0,"arr":{$slice: [0,1]}})
{ "name" : "ha", "arr" : [ [ 11, 22 ] ] }
Я также попытался
> db.test.find({},{_id:0,"arr":{$slice: [0,1][1,1]}})
{ "name" : "ha", "arr" : [ [ 11, 22 ] ] }
Нужный результат будет либо
22
или
{"arr":[[22]]}
Спасибо
EDIT:
После прочтения комментариев я думаю, что я упростил пример данных слишком много, и я должен предоставить более подробную информацию:
- Есть много других документов в коллекция, подобная той, что Я предоставил. Но все они имеют одинаковую структуру.
- Есть несколько элементов массива, чем просто два
- В реальном мире массив содержит очень длинные тексты (500кб-1MB), , поэтому очень экспансивный передавать целые данные клиенту.
- Перед агрегацией я сделаю запрос по полю «имя». Просто пропустил это в примере для простоты.
- Целевые показатели являются переменными, так что иногда мне нужно знать значение обр [0] [1], в следующий раз, это обры [1] [4]
примера данные, :
> db.test.insert({"name" : "Olivia", "arr" : [ [11, 22, 33, 44],[55,66,77,88],[99] ] })
> db.test.insert({"name" : "Walter", "arr" : [ [11], [22, 33, 44],[55,66,77,88],[99] ] })
> db.test.insert({"name" : "Astrid", "arr" : [ [11, 22, 33, 44],[55,66],[77,88],[99] ] })
> db.test.insert({"name" : "Peter", "arr" : [ [11, 22, 33, 44],[55,66,77,88],[99] ] })
пример запроса:
> db.test.find({name:"Olivia"},{"arr:"...})
Это не может работать ни на одном, кроме одного документа. Конечно, '$ skip' и' $ limit' "имитируют" индексированные позиции, но после того, как вы 'разматываете' на нескольких сборных документах, это становится неуместным. –
Он будет работать, если желаемый выход ** равен ** для одного документа. Всегда можно получить только один желаемый документ, используя '$ match'. –
Это никогда не будет реалистично. Речь идет о том, чтобы дать людям «реальные» примеры, которые они действительно могут использовать. Отдельные случаи документов лучше кодируются в клиенте, как я сказал в своем ответе. –