Mam kolekcję unitScores, gdzie każdy dokument ma identyfikator oraz szereg dokumentów takiego:
"_id": ObjectId("52134edd5b1c2bb503000001"),
"scores": [
{
"userId": ObjectId("5212bf3869bf351223000002"),
"unitId": ObjectId("521160695483658217000001"),
"score": 33
},
{
"unitId": ObjectId("521160695483658217000001"),
"userId": ObjectId("5200f6e4006292d308000008"),
"score": 17
}
]
Mam dwie znaleźć zapytania:
_id:new ObjectID(scoreId)
"scores.userId":new ObjectID(userId)
"scores.unitId":new ObjectID(unitId)
i
_id:new ObjectID(scoreId)
scores:
$elemMatch:
userId:new ObjectID(userId)
unitId:new ObjectID(unitId)
Spodziewam się, żeby dać taki sam efekt, ale przy użyciu identyfikatora użytkownika wejściowy i unitId z
wersja z notacją kropkową zwraca nieprawidłowy wpis tablicy (ten z wynikiem: 17), a $ elemMatch zwraca poprawny wpis (ten z wynikiem: 33). Dlaczego?
Czy możesz dołączyć rzeczywisty dokument, który przekazujesz, do zapytania lub (jak wygląda) kodu Java, którego używasz do utworzenia zapytania? Wygląda na to, że powinni oboje pracować. – Mason