2017-06-14 1 views
0

Ich habe ein Problem mit einer Mongodb-Abfrage. derzeit

Ich führe

collection.find({ "history.data": { "key": "paymentStatus", "value": { 
$in: ["fail1", "fail2", "fail3", "fail4", "fail5", "fail6", "fail7", 
"blocked"] } } }) 

aber es zurückgibt mir nicht die gewünschten Objekte, in der Tat ist es ein leeres Array zurückgibt.

Die Struktur des Objekts ist wie folgt:

{history: {time: ... , data: [ {key: "paymentStatus", value: "fail1"}, ... ] }} 

Ist dies die richtige Syntax für eine verschachtelte Abfrage mongodb zu finden?

+0

Sie verwenden 'elemMatch' zum Vergleichen von Arrayfeldern in mehreren Abfragekriterien. Etwas wie 'collection.find ({" history.data ": {$ elemMatch: {" key ":" paymentStatus "," Wert ": {$ in: [" fail1 "," fail2 "," fail3 "," fail4 "," fail5 "," fail6 "," fail7 "," blockiert "}}}})' – Veeram

+0

vielen Dank, mein Herr –

Antwort

1

Die korrekte Syntax für die Abfrage ist die folgende:

collection.find({ "history.data.key":"paymentStatus"}) 

Aber in Ihrem Fall:

collection.find({ 
    "history.data": { 
    $elemMatch: { 
     "key":"paymentStatus", 
     "value": { $in: ["fail1","fail2","fail3","fail4","fail5","fail6","fail7", "blocked"]} 
    } 
    } 
}) 

Falls Sie nur statt zwei ein Abfragekriterien hatte, konnte man folgendes schreiben Sie haben zwei Abfragekriterien, also müssen Sie $ elemMatch verwenden.