【问题标题】:Dot notation vs. $elemMatch点符号与 $elemMatch
【发布时间】:2013-08-20 23:26:26
【问题描述】:

我有一个 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)。这是为什么呢?

【问题讨论】:

  • 您能否将您传递到查询中的实际文档或您用于构造查询的(看起来像)Java 代码包含在内?似乎他们都应该工作。

标签: mongodb


【解决方案1】:

$elemMatch 与点符号的逻辑不同。 $elemMatch 需要相同的嵌套元素才能具有值。使用点表示法允许任何嵌套元素具有值。因此,由于查询逻辑不同,您会看到不同的结果。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    • 2012-05-01
    • 2017-02-05
    相关资源
    最近更新 更多