我正在Mongo中尝试一个简单的查询,在MySQL中看起来像这样。

select * from emails where bounceCount > sentCount;

到目前为止我有。

db.email.find({ bounceCount : { $gt : sentCount } } );

但是我得到了这个错误

JS Error: ReferenceError: sentCount is not defined (shell):0

如何在shell中引用sentCount?

===============>>#1 票数:19

每个人似乎都提到$where而不知道它是:

  • 不安全(被证实)
  • JavaScript,而不是MongoDB内部
  • 而且,在2.4之前的版本中,单线程和全局锁定

对于大约99%的情况,另一种更好的方法是使用聚合框架:

db.col.aggregate([
    {$project: {ab: {$cmp: ['$bounceCount','$sentCount']}}},
    {$match: {ab:{$gt:0}}}
])

===============>>#2 票数:13

db.so.find("this.bounceCount > this.sentCount")就是你要找的。

等效: db.so.find({"$where":"this.bounceCount > this.sentCount"})

文档: http//docs.mongodb.org/manual/reference/operator/where/

壳牌产量:

> db.so.insert({bounceCount:1, sentCount:2})
> db.so.insert({bounceCount:5, sentCount:3})
> db.so.insert({bounceCount:5, sentCount:4})
> db.so.insert({bounceCount:5, sentCount:7})
> db.so.insert({bounceCount:9, sentCount:7})

> db.so.find()
{ "_id" : ObjectId("516d7f30675a2a8d659d7594"), "bounceCount" : 1, "sentCount" : 2 }
{ "_id" : ObjectId("516d7f37675a2a8d659d7595"), "bounceCount" : 5, "sentCount" : 3 }
{ "_id" : ObjectId("516d7f3b675a2a8d659d7596"), "bounceCount" : 5, "sentCount" : 4 }
{ "_id" : ObjectId("516d7f3d675a2a8d659d7597"), "bounceCount" : 5, "sentCount" : 7 }
{ "_id" : ObjectId("516d7f40675a2a8d659d7598"), "bounceCount" : 9, "sentCount" : 7 }

> db.so.find({"bounceCount":5})
{ "_id" : ObjectId("516d7f37675a2a8d659d7595"), "bounceCount" : 5, "sentCount" : 3 }
{ "_id" : ObjectId("516d7f3b675a2a8d659d7596"), "bounceCount" : 5, "sentCount" : 4 }
{ "_id" : ObjectId("516d7f3d675a2a8d659d7597"), "bounceCount" : 5, "sentCount" : 7 }

> db.so.find("this.bounceCount > this.sentCount")
{ "_id" : ObjectId("516d7f37675a2a8d659d7595"), "bounceCount" : 5, "sentCount" : 3 }
{ "_id" : ObjectId("516d7f3b675a2a8d659d7596"), "bounceCount" : 5, "sentCount" : 4 }
{ "_id" : ObjectId("516d7f40675a2a8d659d7598"), "bounceCount" : 9, "sentCount" : 7 }

===============>>#3 票数:11

它应该做的伎俩:

db.emails.find({ $expr: { $gt: [ "$bounceCount" , "$sentCount" ] } });

以下是我发现它的参考: https//docs.mongodb.com/manual/reference/operator/query/expr/#op._S_expr

===============>>#4 票数:1

您可以使用$ where运算符执行此操作,这样您就可以在查询中使用Javascript代码。

举个例子,你会这样做:

db.email.find({ $where: "this.bounceCount > this.sentCount" });

有关$ where运算符的更多详细信息,请参阅MongoDB文档页面: http//docs.mongodb.org/manual/reference/operator/where/#op._S_where

  ask by Mitesh translate from so

未解决问题?本站智能推荐:

1回复

在Mongo上的计数(字段)

我具有以下结构的歌曲及其元数据的集合: 现在,我想使用Node.js获取每个艺术家的列表,以及歌曲数量和专辑数量。 到目前为止,使用聚合框架,我可以使用以下管道获得每个艺术家的对象数组,歌曲数量和专辑标题数组 (而不只是数量): 如果将$addToSet替换$addToSet
2回复

为什么mongo不返回所有字段?

我有一个位置和名称为字段的集合。 我为猫鼬创建了名称索引,如下所示, 当我在robomongo上运行此命令时,它将返回所有12个字段, 但是,当我在robomongo上运行此命令时,它仅返回带有两个字段(id和location)的值,
1回复

Mongo DB删除字段和值

在mongo shell中,如何删除所有出现的"id" : "1"字段的值总是不同的。 我会使用$ unset运算符吗? 那会删除价值和字段吗?
2回复

Mongo Db按索引字段搜索

我将字段'search_string'添加到我的文档中并将其编入索引。 db.my_collection.createIndex({search_string: "text"}) Search_string包含:'a ar are aren arena'。 我可以找到这样的记录: db.
1回复

蒙哥(Mongo):基于$ exists的字段索引

我有以下猫鼬模式: 对于某些数据对象,定义了eventCount,并且为正数;对于其他数据对象,未定义eventCount。 我想设计一个索引,以使这样的查询尽可能快: 做这个的最好方式是什么? 这是我能想到的最佳解决方案,但我想知道是否有人有更好的解决方案: 将i
2回复

Mongo嵌套字段填充问题

我如何填充ID字段 这个特定的命令对我不起作用
3回复

Spring Data Mongo测试字段

我正在使用Spring Data Mongo和Mongo DB; 在集合中,文档有一个字段,假设包含一个整数,我们将其称为myInt。 我想检索所有在2个动态int之间具有myInt的文档,例如: myInt - dynInt1 < myInt < myInt + d
1回复

Mongo更新,但排除某些字段

听起来这与Mongo $ set类似。 在这种情况下,我想更新文档(更新和/或删除字段),但忽略字段creatorName,使其保持不变。 示例文件: 更新为: 如果我使用set,creatorName保持不变(良好),并且firstName和lastName被更新(良好
1回复

如何更新Mongo DB中的字段?

我有这样的文件: 如果此数组中存在值591eefe3470e6cd70c3c9872 ,则尝试为字段parameters设置[] 。 我试过了: 这是行不通的...
1回复

mongo文档中的字段求和

好像我发现的每个类似问题总是回答错误的“事物”。 我有一个数据集,简单的文档(不是子文档)。 每个文档都有六个字段,这些字段基本上是位字段。 每个文档应至少具有以下其中一个字段为true(1),但所有其他字段必须为false(0)。 我认为判断哪些文档不符合该规则的最简单方法是将每个文档