Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/sorting/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有办法根据函数的结果对MongoDB文档进行排序?_Mongodb_Sorting - Fatal编程技术网

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

有没有办法根据函数的结果对MongoDB文档进行排序?,mongodb,sorting,Mongodb,Sorting,我在MongoDB是一个完全的初学者,所以如果这是琐碎的,请原谅 我有一个标签(字符串)集合和一个函数,该函数将字符映射到给定字体的宽度 我想检索按宽度排序的标签(函数的结果)。 有人能告诉我这是否可能,如果有,怎么做 谢谢这是不可能的 另一方面,面向文档的设计不是应用程序不可知的。这意味着您可以根据访问数据的方式来构建数据。在这种情况下,您可以将文本宽度作为字段索引,并按该字段进行排序。任何文本更改都意味着必须重新计算文本宽度 这不是一件坏事,因为您将优化(希望有许多)读取操作,并且在(希望有

我在MongoDB是一个完全的初学者,所以如果这是琐碎的,请原谅

我有一个标签(字符串)集合和一个函数,该函数将字符映射到给定字体的宽度

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

谢谢

这是不可能的

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


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

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

给一份文件

{
    "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函数编写映射函数。但是,我不建议这样做,因为您将在数据库调用中对业务逻辑的一部分进行建模,而这实际上不应该进行。

不,除非您将函数的结果存储在mongodb中作为文档字段。如果您能给我们映射细节,我想我们可以更好地帮助您。更准确地说,如果您可以在mongodb查询中对映射进行建模,那么您想要的是完全可能的,例如使用$switch+$map-这可能是不可取的,因为这听起来更像是您希望在客户端执行的操作。