示例:我有以下文件:
_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]
我怎样才能在猫鼬中实现这一目标?
答案 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
字段。您可以使用map
将results
转换回简单的文档数组:
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.
});