Ho appena iniziato ad imparare MongoDB e non riesco a trovare una soluzione per il mio problema.Proiezione di array multidimensionale MongoDB
Got quel documento:
> db.test.insert({"name" : "Anika", "arr" : [ [11, 22],[33,44] ] })
Si prega di notare il campo "arr", che è un array multidimensionale.
Ora sto cercando una query che restituisce solo il valore di arr [0] [1] che è 22. Ho provato a farlo utilizzando $ slice, tuttavia non so come indirizzare il secondo dimensione con quella.
> db.test.find({},{_id:0,"arr":{$slice: [0,1]}})
{ "name" : "ha", "arr" : [ [ 11, 22 ] ] }
Ho anche provato
> db.test.find({},{_id:0,"arr":{$slice: [0,1][1,1]}})
{ "name" : "ha", "arr" : [ [ 11, 22 ] ] }
L'output desiderato sarebbe o
22
o
{"arr":[[22]]}
Grazie
01.235.EDIT:
Dopo aver letto i commenti che penso che ho semplificato i dati di esempio troppo e devo fornire maggiori informazioni:
- ci sono molti altri documenti nella collezione come quella che ho fornito . Ma hanno tutti la stessa struttura.
- Non ci sono più elementi di un array di solo due
- Nel mondo reale l'array contiene davvero testi lunghi (500kb-1MB), quindi è molto espansiva per trasmettere i dati interi al client.
- Prima dell'aggregazione farò una query dal campo 'nome'. Solo saltato nell'esempio per semplicità.
- Gli indici di riferimento sono variabili, quindi a volte devo conoscere il valore di arr [0] [1], la prossima volta è arr [1] [4]
esempio dati :
> 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] ] })
esempio di query:
> db.test.find({name:"Olivia"},{"arr:"...})
Questo non può funzionare su null'altro che un singolo documento. Sicuramente '$ skip' e' $ limit' "simulano" posizioni indicizzate, ma una volta che '$ unwind' su più documenti di raccolta diventa irrilevante. –
Funzionerà se l'output desiderato ** è ** per un singolo documento. È sempre possibile ottenere un solo documento desiderato usando '$ match'. –
Non sarà mai realisticamente. Si tratta di dare alle persone esempi "reali" che possono davvero utilizzare. I singoli casi di documenti sono meglio codificati nel client come ho affermato nella mia risposta. –