【发布时间】:2018-10-24 04:04:19
【问题描述】:
MongoDB 文档使用 query、expression、query predicate、clause 等词,但我无法使用找出它们的确切含义。
例如$elemMatch的语法定义为
{ <field>: { $elemMatch: { <query1>, <query2>, ... } } }
但我不知道query1、query2 是什么意思。关于$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 的查询不会:" - 因为在“单个谓词”上您只需使用
$indb.inventory.find( {"dim_cm.value": { "$in": [49] } } }。唯一一次将$elemMatch与“内部”$or条件(或 `$in )一起使用是因为数组元素本身内部有一个“数组”。无需询问有关手册的问题,只需显示您的数据以及您期望返回的结果。如果您不理解文档,那么您可能正在查看错误的运算符。 -
事实上,正如刚才指出的那样,您正在查看错误的运算符。
-
@AshishChoudhary 我实际上正在尝试为 Mongo 编写一个库,这将使得无法形成无效查询 - 无效查询将无法编译(这比让您形成查询的现有库更好)执行它们时会失败)。但要这样做,我需要了解哪些查询是有效的,哪些不是。所以我试图理解文档——这似乎不精确,有时甚至是错误的(比如在我的示例中,它指出
$elemMatch不是必需的,但实际上没有它它就无法工作)。 -
@RadekMicek 你可以在这里找到词汇表部分docs.mongodb.com/manual/reference/glossary
标签: mongodb mongodb-query