mongodb聚合$按最接近某个值的字段值排序

Ami*_*mar 5 javascript mongodb meteor aggregation-framework

我想使用聚合 $sort 价格值最接近 我一直使用的 92 聚合来对以下聚合输出进行排序

db.units.aggregate([
{$match: {category: 'a'}},
{$limit: 3},
{$project: {price:1, name: 1, category: 1}}
]);
Run Code Online (Sandbox Code Playgroud)

输出

[{'_id': '111', 'price': 100, 'name': 'abc', 'category': 'a'}
{'_id': '222', 'price': 90, 'name': 'efg', 'category': 'a'}
{'_id': '333', 'price': 80, 'name': 'xyz', 'category': 'a'}]
Run Code Online (Sandbox Code Playgroud)

期望的输出:

[{'_id': '222', 'price': 90, 'name': 'efg', 'category': 'a'}
{'_id': '111', 'price': 100, 'name': 'abc', 'category': 'a'}
{'_id': '333', 'price': 80, 'name': 'xyz', 'category': 'a'}]
Run Code Online (Sandbox Code Playgroud)

注意:价格字段是嵌套对象。

Geo*_*ley 2

这是一个有趣的问题。好吧,这就是我会做的

db.units.aggregate([

{$match: {category: 'a'}},

{$project: {diff: {$abs: {$subtract: [92, '$price']}}, doc: '$$ROOT'}},

{$project :{"diff" : 0}},

{$sort: {diff: 1}}

])
Run Code Online (Sandbox Code Playgroud)

price现在,这里发生的事情是,我取值与提到/指定值的绝对差。这样你就可以根据差异进行排序。是的..您甚至可以使用从文档中排除该属性{$project :{"diff" : 0}}