我有一个unitScores集合,其中每个文档都有一个id和如下所示的文档数组:

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

我有两个查找查询:
_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的条目)。这是为什么?

最佳答案

$elemMatch与点表示法的逻辑不同。 $elemMatch需要相同的嵌套元素才能具有值。使用点表示法可以使任何嵌套元素都具有一个值。因此,由于查询逻辑不同,您看到的结果也不同。

关于mongodb - 点表示法与$ elemMatch,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18335248/

10-10 00:09