首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >Mongo Query $gt,$lt

Mongo Query $gt,$lt
EN

Stack Overflow用户
提问于 2011-02-11 14:24:45
回答 3查看 85K关注 0票数 32

我有一个问题在下面。我希望获取4到6之间的项,因此只有a:1应该匹配,因为它在b中的值为5。

代码语言:javascript
运行
复制
> 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似乎不起作用:

代码语言:javascript
运行
复制
> 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的混淆。

代码语言:javascript
运行
复制
> 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是不同的,因为我在不同的机器上)

代码语言:javascript
运行
复制
> 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 }}});
>

未返回任何文档。

EN

回答 3

Stack Overflow用户

发布于 2016-02-25 18:29:07

$gt

代码语言:javascript
运行
复制
Syntax: {field: {$gt: value} }

例如:

代码语言:javascript
运行
复制
db.inventory.find( { qty: { $gt: 20 } } )

$lt

代码语言:javascript
运行
复制
Syntax: {field: {$lt: value} }

例如:

代码语言:javascript
运行
复制
db.inventory.find( { qty: { $lt: 20 } } )

eg2:

代码语言:javascript
运行
复制
db.inventory.find({ qty : { $gt :  20, $lt : 60}});
票数 9
EN

Stack Overflow用户

发布于 2015-10-28 15:44:12

代码语言:javascript
运行
复制
.find( {$and:[ {b:{$gt:4}}, {b:{$lt:6}} ]} )
票数 0
EN

Stack Overflow用户

发布于 2011-02-11 14:33:01

因为你没有检查文档。

看见

http://www.mongodb.org/display/DOCS/Advanced+Queries

并检查页面上的“范围”。

您的查询语法也不正确(与示例进行比较)

你的问题中的“为什么是a:2”部分也没有任何意义,因为你的查询中没有涉及“a”。如果你想搜索a:1,那么你必须在你的查询中包含它。

请记住,除非使用$or运算符,否则默认情况下所有查询子句都是AND组合的。

票数 -11
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4966203

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档