在mongodb查询中使用$ lt或$ gt运算符

时间:2011-03-22 11:32:38

标签: mongodb

我的收藏结构* “countcollection” *如下所示

{
"limitcount": 10000,
"currentcount": 100
}

我想纠正能够比较currentcount<($lt)limitcount的mongoquery 或currentcount>($gt)limitcount

首先,我写了下面的mongo查询

db.countcollection.find({"currentcount":{$lt:{"limitcount"}}});
db.countcollection.find({"currentcount":{$gt:{"limitcount"}}});

但它无法执行。

请为此mongoquery提供您的意见。

提前感谢。

javaamtho。

3 个答案:

答案 0 :(得分:5)

正如Bugai13所说,你无法对查询中的2个字段进行比较。

$ where的问题在于性能 - 因为这是一个将为每个文档执行的javascript函数,因此它必须扫描每个文档。

因此,您可以存储另一个字段(您可以将其编入索引)以及那些现有字段

e.g。

{
"limitcount": 10000,
"currentcount": 100,
"remainingcount" : 9900
}

所以你可以在新字段上查询:

db.countcollection.find({"remainingcount" : {$gt : 0}})
db.countcollection.find({"remainingcount" : {$lt : 0}})

答案 1 :(得分:3)

您无法使用简单查询执行您想要的操作(就像您在上面尝试过的那样)。 mongodb jira中存在此类错误,您可以为此投票。

我想你应该像这样使用javascript expression

db.countcollection.find( { $where: "this.currentcount < this.limitcount" } );

希望得到这个帮助。

答案 2 :(得分:0)

$gt:{"limitcount"}}

没有任何意义,因为你正在与字符串limitcount进行比较。如果要与预定义变量进行比较,请使用变量,但在其周围加上引号。为什么选择这种奇怪的语法?