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