2013-08-20 21 views
5

Ho una collezione unitScores, in cui ogni documento ha un id e una serie di documenti come questo:

"_id": ObjectId("52134edd5b1c2bb503000001"), 
"scores": [ 
    { 
     "userId": ObjectId("5212bf3869bf351223000002"), 
     "unitId": ObjectId("521160695483658217000001"), 
     "score": 33 
    }, 
    { 
     "unitId": ObjectId("521160695483658217000001"), 
     "userId": ObjectId("5200f6e4006292d308000008"), 
     "score": 17 
    } 
] 

Ho due domande: trovare

_id:new ObjectID(scoreId) 
"scores.userId":new ObjectID(userId) 
"scores.unitId":new ObjectID(unitId) 

e

_id:new ObjectID(scoreId) 
scores: 
    $elemMatch: 
    userId:new ObjectID(userId) 
    unitId:new ObjectID(unitId) 

mi aspetterei loro di dare lo stesso risultato, ma utilizzando l'ID utente di input e di UNITID

userId: 5212bf3869bf351223000002 
unitId: 521160695483658217000001 

la versione notazione restituisce la voce errata array (quella con punteggio: 17) e il $ elemMatch restituisce la voce corretta (quella con punteggio: 33). Perché?

+1

È possibile includere il documento effettivo che si sta passando nella query o il codice Java (simile a) che si sta utilizzando per costruire la query? Sembra che dovrebbero entrambi funzionare. – Mason

risposta

3

$elemMatch non è la stessa logica della notazione punto. $elemMatch richiede che gli stessi elementi nidificati abbiano i valori. L'uso della notazione a punti consente a qualsiasi elemento nidificato di avere valori. Pertanto, stai vedendo risultati diversi perché la logica della query è diversa.

Problemi correlati