Ich habe gerade begonnen, MongoDB zu lernen und kann keine Lösung für mein Problem finden.MongoDB multidimensionale Array-Projektion
erhielt das Dokument:
> db.test.insert({"name" : "Anika", "arr" : [ [11, 22],[33,44] ] })
Bitte beachten Sie die "arr" Feld, das ein mehrdimensionales Array ist.
Jetzt suche ich nach einer Abfrage, die nur den Wert von arr [0] [1] zurückgibt, was 22 ist. Ich habe versucht, das mit $ slice zu erreichen, aber ich weiß nicht, wie ich das zweite ansprechen soll Dimension damit.
> db.test.find({},{_id:0,"arr":{$slice: [0,1]}})
{ "name" : "ha", "arr" : [ [ 11, 22 ] ] }
Ich habe auch versucht
> db.test.find({},{_id:0,"arr":{$slice: [0,1][1,1]}})
{ "name" : "ha", "arr" : [ [ 11, 22 ] ] }
Die gewünschte Ausgabe wäre entweder
22
oder
{"arr":[[22]]}
Danke
EDIT:
Nach dem Lesen der Kommentare Ich denke, dass ich die Beispieldaten viel zu vereinfacht habe, und ich habe mehr Informationen liefern:
- Es in der viele weitere Dokumente Sammlung wie diese, die Ich habe zur Verfügung gestellt. Aber sie alle haben die gleiche Struktur.
- Es gibt mehr Array-Elemente sind als nur zwei
- In der realen Welt das Array wirklich lange Texte enthält (500kb-1MB), so ist es sehr expansive die gesamten Daten an den Client zu übertragen.
- Vor der Aggregation werde ich eine Abfrage durch das 'Name' Feld machen. Nur übersprungen, dass in dem Beispiel der Einfachheit halber.
- Die Zielindizes sind variabel, so dass manchmal muss ich den Wert von arr wissen [0] [1], es arr [1] [4]
Beispiel Daten das nächste Mal ist :
> 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] ] })
Beispielabfrage:
> db.test.find({name:"Olivia"},{"arr:"...})
Dies kann nur mit einem einzelnen Dokument funktionieren. Sure "$ skip" und "$ limit" simulieren "indexierte Positionen", aber sobald Sie mehrere Collections-Dokumente "abwickeln", wird dies irrelevant. –
Es funktioniert, wenn die gewünschte Ausgabe ** ** für ein einzelnes Dokument ist. Es ist immer möglich, nur ein gewünschtes Dokument mit '$ match' zu erhalten. –
Es wird nie realistisch sein. Hier geht es darum, den Menschen "echte" Beispiele zu geben, die sie wirklich nutzen können. Einzeldokumentfälle sind im Client besser codiert als in meiner Antwort angegeben. –