我希望使用聚合$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'}]注:价格字段是嵌套对象。
发布于 2018-04-06 11:43:46
这是个有趣的问题。好吧,我就是这么做的
db.units.aggregate([
{$match: {category: 'a'}},
{$project: {diff: {$abs: {$subtract: [92, '$price']}}, doc: '$$ROOT'}},
{$project :{"diff" : 0}},
{$sort: {diff: 1}}
])现在,这里发生的事情是,我取price值与上述/指定值的绝对差。这样你就可以根据这些差异来分类了。是的..。您甚至可以使用{$project :{"diff" : 0}}从文档中排除该属性。
发布于 2018-04-06 11:45:20
您可以使用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
}
]你可以在这里试试:Mongoplayplace.net/p/vfAwWMPCDbl
https://stackoverflow.com/questions/49691521
复制相似问题