我有一个数据集,其中包含一个语言列表,每种语言都是用呈现的语言编写的
例如
- 德语
- 荷兰
- 斯洛文契纳
- 捷克
- Български
问题是当我对语言进行排序时,我得到了上面列出的列表。不管多么自然
- Български
- 捷克
- 德语
- 荷兰
- 斯洛文契纳
你会如何建议这样做?
一个是创建一个排序字段,但我有另一个包含 15.000 个文档的集合,并且为此创建一个排序索引需要做很多工作。
MongoDB 没有基于区域设置的排序,而是仅使用 Unicode 代码点排序。这适用于标准英语字母表,但显然不适用于其他语言。此处正在跟踪此问题,可以在此处找到解决方法
我的回答取自此处发布的关于瑞典字母排序的 Google Groups 问题。如果您想了解更多关于 Unicode Collation 的信息,可以查看Unicode Technical Standard
一个建议是将您的数据提取到一种可以正确处理 Unicode 排序规则的语言中,然后从那里应用您的排序字段。或者,通常的语言列表还包括一个区域设置代码(例如英语的 EN),这就是它们的排序方式。
根据您的示例,使用区域设置代码列表,您的订单将是正确的:
- Български (保加利亚语) - BG
- Česky(我猜是捷克语/Česka)- CS
- 德语 - DE
- 荷兰 - NL
- 斯洛文尼亚 - SK
我在 finn 中使用了这个配置,在这个链接https://docs.mongodb.com/manual/reference/method/db.collection.aggregate/中你可以找到有关它的信息。
collation : { locale: "country"}
//example query filter by "field"
db.items.find({"field": "value"}).sort({"field" : -1}).collation({"locale": "pl"})