我正在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?
答案 0 :(得分:18)
每个人似乎都提到$where
而不知道它是:
对于大约99%的案例来说,另一种更好的方法是使用聚合框架:
db.col.aggregate([
{$project: {ab: {$cmp: ['$bounceCount','$sentCount']}}},
{$match: {ab:{$gt:0}}}
])
答案 1 :(得分:13)
db.so.find("this.bounceCount > this.sentCount")
正是您要找的。 p>
等效:db.so.find({"$where":"this.bounceCount > this.sentCount"})
文档:http://docs.mongodb.org/manual/reference/operator/where/
Shell输出:
> 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 }
答案 2 :(得分:11)
应该这样做:
db.emails.find({ $expr: { $gt: [ "$bounceCount" , "$sentCount" ] } });
以下是我找到的参考资料: https://docs.mongodb.com/manual/reference/operator/query/expr/#op._S_expr
答案 3 :(得分:1)
您可以使用$ where运算符执行此操作,这样您就可以在查询中使用Javascript代码。
对于您的示例,您可以这样做:
db.email.find({ $where: "this.bounceCount > this.sentCount" });
有关$ where运算符的更多详细信息,请参阅MongoDB文档页面: 的 http://docs.mongodb.org/manual/reference/operator/where/#op._S_where 强>