mongoDB中提到的两个查询之间的差异

Posted

技术标签:

【中文标题】mongoDB中提到的两个查询之间的差异【英文标题】:DIfference between mentioned two queries in mongoDB 【发布时间】:2017-05-09 15:07:56 【问题描述】:

请解释下面提到的两个查询之间的区别。我得到第一个查询的输出,但第二个没有输出。提前致谢。

表格数据:

> db.inventory.find()
 "_id" : ObjectId("5911ce218c302726ff998853"), "item" : "journal", "instock" : [  "warehouse" : "A", "qty" : 5 ,  "warehouse" : "C", "qty" : 15  ] 
 "_id" : ObjectId("5911ce218c302726ff998854"), "item" : "notebook", "instock" : [  "warehouse" : "C", "qty" : 5  ] 
 "_id" : ObjectId("5911ce218c302726ff998855"), "item" : "paper", "instock" : [  "warehouse" : "A", "qty" : 60 ,  "warehouse" : "B", "qty" : 15  ] 
 "_id" : ObjectId("5911ce218c302726ff998856"), "item" : "planner", "instock" : [  "warehouse" : "A", "qty" : 40 ,  "warehouse" : "B", "qty" : 5  ] 
 "_id" : ObjectId("5911ce218c302726ff998857"), "item" : "postcard", "instock" : [  "warehouse" : "B", "qty" : 15 ,  "warehouse" : "C", "qty" : 35  ] 
 "_id" : ObjectId("5911ce948c302726ff998858"), "item" : "journal", "instock" : [  "warehouse" : "A", "qty" : 5  ] 

查询 1:

 > db.inventory.find(  "instock":  $elemMatch:  qty: 5, warehouse: "A"  )

输出:

 "_id" : ObjectId("5911ce218c302726ff998853"), "item" : "journal", "instock" : [  "warehouse" : "A", "qty" : 5 ,  "warehouse" : "C", "qty" : 15  ] 
 "_id" : ObjectId("5911ce948c302726ff998858"), "item" : "journal",    "instock" : [  "warehouse" : "A", "qty" : 5  ] 

查询 2:

> db.inventory.find(  "instock.qty":  $elemMatch:  $gt: 10, $lte: 20    )

输出:

没有输出

【问题讨论】:

【参考方案1】:

来自docs

$elemMatch 运算符匹配包含数组字段的文档 至少有一个元素匹配所有指定的查询 标准。

注意field应该是一个数组。

第二次查询数组内嵌入字段qty的正确语法是

db.inventory.find(  "instock":  $elemMatch:  qty:  $gt: 10, $lte: 20     )

您应该有一个像下面这样的文档,其中 qty 作为当前第二个查询返回结果的数组字段。

 "item" : "journal", "instock" : [  "qty" : [ 5, 15 ] ,  "warehouse" : "A", "qty" : 5 ,  "warehouse" : "C", "qty" : 15 ] 

【讨论】:

感谢@Veeram。所以问题出在“instock.qty”上。因为它不是一个数组.. 对吗?

以上是关于mongoDB中提到的两个查询之间的差异的主要内容,如果未能解决你的问题,请参考以下文章

mongodb 中不用$where的代替

比较两个集合的 mongo 差异

MongoDB - 查找两个集合之间的差异

Mongo同时两个$or的查询

mongodb 查询的用法

用于比较两个表的 SQL 到 Mongo DB 查询