【问题标题】:Mongo documentation: what is query, expression, query predicate and clause [duplicate]Mongo 文档:什么是查询、表达式、查询谓词和子句 [重复]
【发布时间】:2018-10-24 04:04:19
【问题描述】:

MongoDB 文档使用 queryexpressionquery predicateclause 等词,但我无法使用找出它们的确切含义。

例如$elemMatch的语法定义为

{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }

但我不知道query1query2 是什么意思。关于$elemMatch的同一篇文章提到了词查询谓词:

如果您在$elemMatch 表达式中指定单个查询谓词,则不需要$elemMatch

但他们没有具体说明这是什么意思。文档(或 Mongo 源代码)中是否有精确定义这些词的位置?


更具体地说:我正在尝试了解如何形成有效的查询。例如为什么使用这个数据库

db.inventory.insertMany([
   { item: "planner", qty: 75, tags: ["blank", "red"], dim_cm: [ {value: 49} ] }
]);

以下查询有效

db.inventory.find( {dim_cm: { $elemMatch :{ $or: [{value: 49}] } }} )

但没有$elemMatch 的查询不会:

db.inventory.find( {dim_cm: { $or: [{value: 49}] } })

尽管文档声明 如果您在 $elemMatch 表达式中指定单个查询谓词,则不需要 $elemMatch

【问题讨论】:

  • 我认为你应该发布你想要的集合和输出,而不是所有这些......
  • "但没有 $elemMatch 的查询不会:" - 因为在“单个谓词”上您只需使用 $in db.inventory.find( {"dim_cm.value": { "$in": [49] } } }。唯一一次将 $elemMatch 与“内部”$or 条件(或 `$in )一起使用是因为数组元素本身内部有一个“数组”。无需询问有关手册的问题,只需显示您的数据以及您期望返回的结果。如果您不理解文档,那么您可能正在查看错误的运算符。
  • 事实上,正如刚才指出的那样,您正在查看错误的运算符。
  • @AshishChoudhary 我实际上正在尝试为 Mongo 编写一个库,这将使得无法形成无效查询 - 无效查询将无法编译(这比让您形成查询的现有库更好)执行它们时会失败)。但要这样做,我需要了解哪些查询是有效的,哪些不是。所以我试图理解文档——这似乎不精确,有时甚至是错误的(比如在我的示例中,它指出 $elemMatch 不是必需的,但实际上没有它它就无法工作)。
  • @RadekMicek 你可以在这里找到词汇表部分docs.mongodb.com/manual/reference/glossary

标签: mongodb mongodb-query


【解决方案1】:

$elemMatch 运算符匹配包含数组字段且至少有一个元素匹配所有指定查询条件的文档。检查this链接

为了更好地了解 mongodb,您可以从 here 开始。

Mongodb 还为新学习者提供免费课程。检查this

【讨论】:

  • 是的,但从该文档中仍然不清楚精确是查询还是表达式。我可以在文档的许多部分看到这些词,但我找不到任何准确的解释(我找到了非官方的 BNF github.com/mongodb-js/mongodb-language-model/blob/master/docs/…,但那里的定义与官方文档不同)。
  • 跟着例子练习,你就会明白mongodb了。仅仅阅读文档对您没有帮助。
猜你喜欢
  • 2013-09-12
  • 1970-01-01
  • 1970-01-01
  • 2021-11-11
  • 1970-01-01
  • 2015-12-21
  • 1970-01-01
  • 2014-09-06
  • 1970-01-01
相关资源
最近更新 更多