我有一个问题在下面。我希望获取4到6之间的项,因此只有a:1应该匹配,因为它在b中的值为5。
> db.test.find({ b : { $gt : 4 }, b: {$lt : 6}});
{ "_id" : ObjectId("4d54cff54364000000004331"), "a" : 1, "b" : [ 2, 3, 4, 5 ] }
{ "_id" : ObjectId("4d54d0074364000000004332"), "a" : 2, "b" : [ 2, 4, 6, 8 ] }
>有人能告诉我为什么a:2匹配这个查询吗?我真的不明白为什么它会被退还。
我也尝试了教程中指定的内容,但id似乎不起作用:
> db.test.find({ b : { $gt : 4, $lt : 6}});
{ "_id" : ObjectId("4d54cff54364000000004331"), "a" : 1, "b" : [ 2, 3, 4, 5 ] }
{ "_id" : ObjectId("4d54d0074364000000004332"), "a" : 2, "b" : [ 2, 4, 6, 8 ] }
>这个是为了避免任何关于GT/GTE的混淆。
> db.test.find({b: {$gt: 4.5, $lt: 5.5}});
{ "_id" : ObjectId("4d54cff54364000000004331"), "a" : 1, "b" : [ 2, 3, 4, 5 ] }
{ "_id" : ObjectId("4d54d0074364000000004332"), "a" : 2, "b" : [ 2, 4, 6, 8 ] }
>只需返回a:1。
按照建议,我尝试了一下$elemMatch,但它似乎也不起作用(objectIds是不同的,因为我在不同的机器上)
> db.test.find();
{ "_id" : ObjectId("4d5a24a5e82e00000000433f"), "a" : 1, "b" : [ 2, 3, 4, 5 ] }
{ "_id" : ObjectId("4d5a24bbe82e000000004340"), "a" : 2, "b" : [ 2, 4, 6, 8 ] }
> db.test.find({b: {$elemMatch: {$gt : 4, $lt: 6 }}});
>未返回任何文档。
发布于 2016-02-25 18:29:07
$gt
Syntax: {field: {$gt: value} }例如:
db.inventory.find( { qty: { $gt: 20 } } )$lt
Syntax: {field: {$lt: value} }例如:
db.inventory.find( { qty: { $lt: 20 } } )eg2:
db.inventory.find({ qty : { $gt : 20, $lt : 60}});发布于 2015-10-28 15:44:12
.find( {$and:[ {b:{$gt:4}}, {b:{$lt:6}} ]} )发布于 2011-02-11 14:33:01
因为你没有检查文档。
看见
http://www.mongodb.org/display/DOCS/Advanced+Queries
并检查页面上的“范围”。
您的查询语法也不正确(与示例进行比较)
你的问题中的“为什么是a:2”部分也没有任何意义,因为你的查询中没有涉及“a”。如果你想搜索a:1,那么你必须在你的查询中包含它。
请记住,除非使用$or运算符,否则默认情况下所有查询子句都是AND组合的。
https://stackoverflow.com/questions/4966203
复制相似问题