如何在mongodb,mongoose中找到_id附近的文档

时间:2015-05-26 02:15:45

标签: mongodb mongoose

示例:我有以下文件:

_id = 1, _id = 2, _id = 3, _id = 4, _id = 5, _id = 6, _id = 7, _id = 8, _id = 9

在MySQL中,我使用ABS绝对值函数:

ORDER BY ABS(_id - 1) ASC
LIMIT 3

Then result is [_id = 1, _id = 2, _id = 3]

如果我使用:

ORDER BY ABS(_id - 5) ASC
LIMIT 3
Then result is [_id = 4, _id = 5, _id = 6]

我怎样才能在猫鼬中实现这一目标?

2 个答案:

答案 0 :(得分:2)

MongoDB没有提供绝对值运算符,但您仍然可以使用使用$let执行_id - 5减法的汇总管道和$cond来计算绝对值。

Test.aggregate([
    {$project: {
        abs_id: {
            $let: {
                vars: {sub_id: { $subtract: ['$_id', 5] }},
                in: {
                    $cond: {
                        if: { $lt: ['$$sub_id', 0] },
                        then: { $multiply: [-1, '$$sub_id'] },
                        else: '$$sub_id'
                    }
                }
            }
        },
        doc: '$$ROOT',
        _id: 0
    }},
    {$sort: {abs_id: 1}},
    {$limit: 5}
],
function(err, results) {...});

因此,这会将abs_id字段与原始文档一起投影为doc字段。您可以使用mapresults转换回简单的文档数组:

var docs = results.map(function(item) { return item.doc; });

答案 1 :(得分:1)

1-查找_id:5附近的文档,并假设我们已经获得了Test(任何集合 - 您使用过的)集合的处理程序。

Test.find({_id: {$gte: 5 } }, function(errs, data) {

    // Your code inside callback function.

});