我想使用聚合$ sort价格值最接近92 对聚合输出进行排序 我一直使用的聚合
db.units.aggregate([
{$match: {category: 'a'}},
{$limit: 3},
{$project: {price:1, name: 1, category: 1}}
]);
输出
[{'_id': '111', 'price': 100, 'name': 'abc', 'category': 'a'}
{'_id': '222', 'price': 90, 'name': 'efg', 'category': 'a'}
{'_id': '333', 'price': 80, 'name': 'xyz', 'category': 'a'}]
期望的输出:
[{'_id': '222', 'price': 90, 'name': 'efg', 'category': 'a'}
{'_id': '111', 'price': 100, 'name': 'abc', 'category': 'a'}
{'_id': '333', 'price': 80, 'name': 'xyz', 'category': 'a'}]
注意:价格字段是嵌套对象。
答案 0 :(得分:1)
这是一个有趣的问题。好吧,我就是这样做的
db.units.aggregate([
{$match: {category: 'a'}},
{$project: {diff: {$abs: {$subtract: [92, '$price']}}, doc: '$$ROOT'}},
{$project :{"diff" : 0}},
{$sort: {diff: 1}}
])
现在,这里发生的是,我将price
值与所提到/指定的值进行绝对差异。这样你可以按照这种差异排序。是的..你甚至可以使用{$project :{"diff" : 0}}
答案 1 :(得分:0)
您可以使用92 - '$price'
的绝对值来获得此结果:
查询
db.collection.aggregate([{
"$project": {
"price": "$price",
"name": "$name",
"category": "$category",
"diff": {
"$abs": {
"$subtract": ["$price", 92]
}
}
}
}, {
"$sort": {
"diff": 1
}
}])
输出:
[
{
"_id": "222",
"category": "a",
"diff": 2,
"name": "efg",
"price": 90
},
{
"_id": "111",
"category": "a",
"diff": 8,
"name": "abc",
"price": 100
},
{
"_id": "333",
"category": "a",
"diff": 12,
"name": "xyz",
"price": 80
}
]
你可以在这里试试:mongoplayground.net/p/vfAwWMPCDbl