首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mongodb按字段值聚合$sort最接近某个值

mongodb按字段值聚合$sort最接近某个值
EN

Stack Overflow用户
提问于 2018-04-06 11:13:28
回答 2查看 580关注 0票数 4

我希望使用聚合$sort价格值对聚合输出进行排序,该值与我使用的92聚合最接近。

代码语言:javascript
运行
复制
db.units.aggregate([
{$match: {category: 'a'}},
{$limit: 3},
{$project: {price:1, name: 1, category: 1}}
]);

输出

代码语言:javascript
运行
复制
[{'_id': '111', 'price': 100, 'name': 'abc', 'category': 'a'}
{'_id': '222', 'price': 90, 'name': 'efg', 'category': 'a'}
{'_id': '333', 'price': 80, 'name': 'xyz', 'category': 'a'}]

期望产出:

代码语言:javascript
运行
复制
[{'_id': '222', 'price': 90, 'name': 'efg', 'category': 'a'}
{'_id': '111', 'price': 100, 'name': 'abc', 'category': 'a'}
{'_id': '333', 'price': 80, 'name': 'xyz', 'category': 'a'}]

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-04-06 11:43:46

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

代码语言:javascript
运行
复制
db.units.aggregate([

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

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

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

{$sort: {diff: 1}}

])

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

票数 2
EN

Stack Overflow用户

发布于 2018-04-06 11:45:20

您可以使用92 - '$price'的绝对值来获得以下结果:

查询是

代码语言:javascript
运行
复制
db.collection.aggregate([{
    "$project": {
        "price": "$price",
        "name": "$name",
        "category": "$category",
        "diff": {
            "$abs": {
                "$subtract": ["$price", 92]
            }
        }
    }
}, {
    "$sort": {
        "diff": 1
    }
}])

产出:

代码语言:javascript
运行
复制
[
  {
    "_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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49691521

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档