我需要在mongo过滤器中使用类似子查询的东西。像是说
Select * from table where column_1 < column_2
Select * from table where column_1 < (select max(column_1) from table)
上面的sql语句是否有mongodb等价物?
更新
阅读完文档后,我发现我可以使用mongo Select * from table where column_1 < column_2
$where
但我仍然不知道做Select * from table where column_1 < (select max(column_1) from table)
答案 0 :(得分:2)
Select * from table where column_1 < (select max(column_1) from table)
实际上是一个非常简单的。 MongoDB中没有表格的投影,但幸运的是这个查询非常简单:
var max_doc=db.collection.find().sort({column_1:-1}).limit(1) ;
// Will get to the row with the max value for column_1
if(mac_doc!==null)
var result=db.collection.find({column_1:{$lt:max_doc['column_1']}})
对于初学者而言,这将比性能提高100倍,并且优于$where
。
第一个查询实际上可以使用聚合框架执行,最有可能使用$ cmp运算符:http://docs.mongodb.org/manual/reference/aggregation/cmp/
db.collection.aggregate([
{$project: {_id:'$_id',s:{$cmp:['$column_1','$column_2']}}},
{$match: {s:{$lt:0}}}
])
哪个也很可能比$where
更好,即使是新的2.4更改(实际上只对MR有帮助)。
答案 1 :(得分:1)
您可以使用$where
运算符。请参阅此内容以了解$where