6

unitScores コレクションがあり、各ドキュメントには次のような ID とドキュメントの配列があります。

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

2 つの検索クエリがあります。

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

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

同じ結果が得られると思いますが、入力の userId と unitId を使用します

userId: 5212bf3869bf351223000002
unitId: 521160695483658217000001

ドット表記バージョンは間違った配列エントリ (スコア:17 のもの) を返し、$elemMatch は正しいエントリ (スコア:33 のもの) を返します。何故ですか?

4

1 に答える 1