ich eine unitScores Sammlung haben, wobei jedes Dokument eine ID und eine Reihe von Dokumenten wie diese hat:
"_id": ObjectId("52134edd5b1c2bb503000001"),
"scores": [
{
"userId": ObjectId("5212bf3869bf351223000002"),
"unitId": ObjectId("521160695483658217000001"),
"score": 33
},
{
"unitId": ObjectId("521160695483658217000001"),
"userId": ObjectId("5200f6e4006292d308000008"),
"score": 17
}
]
Ich habe zwei finden Anfragen:
_id:new ObjectID(scoreId)
"scores.userId":new ObjectID(userId)
"scores.unitId":new ObjectID(unitId)
und
_id:new ObjectID(scoreId)
scores:
$elemMatch:
userId:new ObjectID(userId)
unitId:new ObjectID(unitId)
ich würde erwarten, dass sie das gleiche Ergebnis geben, aber mit dem Eingang userId und unitid von
Die Punktnotationsversion gibt den falschen Feldeintrag zurück (der mit der Punktzahl: 17) und $ elemMatch gibt den korrekten Eintrag zurück (der mit der Punktzahl: 33). Warum das?
Können Sie das tatsächliche Dokument, das Sie übergeben, in die Abfrage oder den Java-Code einfügen, den Sie zum Erstellen der Abfrage verwenden? Scheint so, als ob sie beide arbeiten sollten. – Mason