有没有办法按函数的结果对MongoDB文档进行排序?

时间:2018-06-18 14:42:52

标签: mongodb sorting

我是MongoDB的完全开端人员,请原谅,如果这是微不足道的。

我有一组标签(字符串)和一个将char以其给定字体的宽度映射的函数。

我想检索按宽度排序的标签(函数的结果)。 有人可以告诉我是否可能,如果可以,怎么做?

由于

2 个答案:

答案 0 :(得分:0)

这是不可能的。

另一方面,面向文档的设计不是应用程序无关的。这意味着您可以根据要访问数据的方式构建数据。在这种情况下,您可以将文本宽度索引为该字段的字段广告排序。任何文本更改都意味着必须重新计算文本宽度。

这不是一件坏事,因为你会优化(希望很多)读操作,并且在(希望很少)写操作期间会有一些代码和性能损失。

答案 1 :(得分:0)

通常,可以使用可用服务器端函数的组合从现有字段派生某些值,然后按该值排序。这是一个例子:

给出一份文件

{
    "input" : 1
}

你可以这样做:

db.collection.aggregate({
    $addFields: {
        "result": {
            $sum: [ "$input", 42 ] // function that calculates "result = input + 42"
        } 
    }
}, {
    $sort: {
        "result": 1 // sort by calculated field in ascending order
    }
})

您可以尝试使用MongoDB函数编写映射函数。但是,我不建议这样做,因为您要在数据库调用中对业务逻辑的某些部分进行建模,而这实际上不应该完成。