2017-10-23 1 views
2

Ich bin neu in MongoDB. Hier ist mein JSON DokumentAbfrage des eingebetteten Dokumentarrays mit falscher Antwort

> 
> db.test.find().pretty() 
{ 
"_id" : ObjectId("59ee168f9da785077ed9359d"), 
"recordid" : 500, 
"metadata" : [ 
    { 
     "field" : 1, 
     "values" : [ 
      100, 
      102, 
      110, 
      151, 
      804 
     ] 
    }, 
    { 
     "field" : 2, 
     "values" : [ 
      201, 
      202, 
      151 
     ] 
    }, 
    { 
     "field" : 3, 
     "values" : [ 
      350, 
      351 
     ] 
    } 
] 
} 
> 
> 

Ich versuche, den $ und Operator in einer Abfrage zu verwenden, so dass I 0 für die folgende Abfrage abgerufen werden. Es gibt jedoch 1 zurück. 1 ist die richtige Antwort, aber nicht was ich will.

... 
... 
> 
> db.test.find({ 
...      $and:[ 
...        {"metadata.field": 2}, 
...        {"metadata.values": { $in: [654,804]}}, 
...        {recordid: 500} 
...       ] 
...     } 
...    ).count() 
1 
> 
> 

Ich weiß, warum es 1 Ergebnis zurückgibt. Dies liegt daran, dass der "Wert" von 804 in field: 1 existiert.

Was ich will ist, dass die Abfrage 0 Ergebnisse zurückgibt, weil field: 2 keinen der Werte 654 und 804 im Feld "Wert" (es hat nur 151, 201 und 202).

Was mache ich falsch?

Steve

Antwort

0

Sie können das $elemMatch Betreiber:

Die $ elemMatch Operator Dokumente übereinstimmt, die mit mindestens einem Element ein Array-Feld enthalten, die alle angegebenen Abfragekriterien entsprechen.

Zum Beispiel:

db.test.find({ 
    recordid: 500, 
    // only match those sub documents in the metadata array which have field=2 
    // and a score of either 654 or 804 
    metadata: { $elemMatch: { field: "2", score: { $in: [654, 804] } } } 
}) 
Verwandte Themen