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中提到的两个查询之间的差异的主要内容,如果未能解决你的问题,请参考以下文章