Właśnie zacząłem uczyć się MongoDB i nie mogę znaleźć rozwiązania dla mojego problemu.Projekcja wielowymiarowych macierzy MongoDB
Got tego dokumentu:
> db.test.insert({"name" : "Anika", "arr" : [ [11, 22],[33,44] ] })
Zwróć uwagę pole "arr", która jest wielowymiarowa tablica.
Teraz szukam zapytania, które zwraca tylko wartość arr [0] [1], która jest 22. Próbowałem to osiągnąć, używając $ slice, jednak nie wiem jak adresować drugie z tym wymiarem.
> db.test.find({},{_id:0,"arr":{$slice: [0,1]}})
{ "name" : "ha", "arr" : [ [ 11, 22 ] ] }
Próbowałem też
> db.test.find({},{_id:0,"arr":{$slice: [0,1][1,1]}})
{ "name" : "ha", "arr" : [ [ 11, 22 ] ] }
pożądany wynik byłby albo
22
lub
{"arr":[[22]]}
Dziękuję
EDIT:
Po przeczytaniu komentarzy myślę, że mam uproszczona przykładowe dane za dużo i muszę dostarczyć więcej informacji:
- Istnieje wiele dokumentów w kolekcja podobna do tej, którą dostarczyłem. Ale wszystkie mają taką samą strukturę.
- Istnieje więcej niż tylko elementy tablicy dwa
- w realnym świecie tablica zawiera bardzo długie teksty (500kb-1MB), więc jest bardzo ekspansywny do przesyłania całych danych do klienta.
- Przed agregacją zrobię zapytanie przez pole "nazwa". Po prostu pominąłem to w przykładzie ze względu na prostotę.
- Indeksy docelowymi są zmienne, to czasami trzeba znać wartość ARR [0] [1], następne jest ARR [1] [4]
przykład dane :
> 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] ] })
przykład zapytania:
> db.test.find({name:"Olivia"},{"arr:"...})
To nie może działać na niczym innym niż pojedynczy dokument. Z pewnością '$ skip' i' $ limit' "symulują" indeksowane pozycje, ale gdy "rozwiniesz" w wielu dokumentach kolekcji, stanie się to nieistotne. –
Będzie działać, jeśli żądane wyjście ** wynosi ** dla pojedynczego dokumentu. Zawsze można uzyskać tylko jeden pożądany dokument za pomocą '$ match'. –
Nigdy nie będzie realistycznie. Chodzi o dawanie ludziom "prawdziwych" przykładów, których naprawdę mogą używać. Przypadki pojedynczego dokumentu są lepiej zakodowane w kliencie, jak stwierdziłem w mojej odpowiedzi. –