2013-04-22 10 views
9

Si consideri il seguente documento:

{ 
    "_id" : "ID_01", 
    "code" : ["001", "002", "003"], 
    "Others" : "544554" 
} 

sono andato attraverso questo MongoDB doc for elemmatch-query & elemmatch-projection, ma non in grado di capirlo come utilizzare lo stesso per il documento di cui sopra.

Qualcuno potrebbe dirmi come è possibile utilizzare $elemMatch per il codice campo?

+1

è '$ tale dicitura davvero quello che stai cercando? [docs] (http://docs.mongodb.org/manual/reference/operator/in/) – WiredPrairie

+1

Un esempio della tua query corrente e il risultato che stai cercando di ottenere sarebbe molto utile. Sembra che tu voglia una query '$ in'. – Stennie

+0

@WiredPrairie: sì esattamente ... grazie ha funzionato .. –

risposta

8

Si desidera utilizzare l'operatore $in anziché $elemMatch in questo caso come $in può essere utilizzato per cercare un valore (o valori) all'interno di un campo specifico. $ in richiede un elenco di valori da passare come array. Inoltre, e per il tuo caso, troverà un singolo valore, o cercando in una matrice di valori. Viene restituito l'intero documento di corrispondenza.

Ad esempio, è possibile utilizzare in questo modo:

db.mycodes.find({ code: { $in: ["001"] } }) 

Quali potrebbero essere semplificate per essere solo:

db.mycodes.find({ code: "001" }) 

Come MongoDB cercherà in una matrice per una singola partita come sopra ("001").

O se si desidera cercare "001" o "002":

db.mycodes.find({ code: { $in: ["001", "002"] } }) 

$in documentation

+0

$ in accetta solo matrici: "Can not canicalical query: BadValue $ in ha bisogno di un array" –

+0

@RaxWunter - corretto. Non sono sicuro del motivo per cui l'ho avuto come ho confermato che si comporta in questo modo a partire dal 2.6. Grazie! (Questo era da aprile 2013 quindi qualcosa potrebbe essere cambiato nella console o nel DB ... non so cosa sia successo :)) – WiredPrairie

2

Se si sta semplicemente cercando di abbinare tutti i documenti con una matrice contenente un dato valore, si può solo specificare il valore sul riferimento a tale array, ad es

db.mycodes.find({ code: '001' }) 

che in questo modo sarebbe tornato voi tutti i documenti che contenevano '001' nella loro code serie

+0

Questo è tutto! Grazie. – thomas

Problemi correlati