0

我需要在 mongo 过滤器中有类似子查询的东西。有点像说

Select * from table where column_1 < column_2

Select * from table where column_1 < (select max(column_1) from table)

上面的 sql 语句是否有 mongodb 等价物?

更新

阅读文档后,我发现我可以Select * from table where column_1 < column_2使用 mongo$where

但我仍然不知道做的答案Select * from table where column_1 < (select max(column_1) from table)

4

2 回答 2

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']}})

这将比$where初学者提高 100 倍的性能和更好的性能。

第一个查询实际上可以使用最有可能使用 $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 有帮助),这也很可能比 a 更好。

于 2013-06-03T14:43:52.467 回答
1

你可以使用$where运算符。请参阅此以了解$where的用法

于 2013-06-03T14:21:48.700 回答