我有一个数据集,其中包含每种语言都以呈现的语言编写的语言列表
例如
- 德语
- 荷兰
- 斯洛文奇纳
- 切斯基
- Български
问题是当我对语言进行排序时,我会得到上面显示的列表。无论多么自然
- Български
- 切斯基
- 德语
- 荷兰
- 斯洛文奇纳
你建议怎么做?
一个是创建一个排序字段,但我有另一个包含 15.000 个文档的集合,并在此上制作排序索引是一项艰巨的工作。
MongoDB没有基于语言环境的排序,而只是使用Unicode代码点排序。这适用于标准英语字母表,但显然不适用于其他字母表。此处正在跟踪此问题,可在此处找到解决方法
我的答案来自此处发布的有关瑞典字母排序的Google网上论坛问题。如果你想阅读更多关于Unicode排序规则的信息,你可以查看Unicode技术标准。
建议将数据提取到正确处理 Unicode 排序规则的语言中,并从那里应用排序字段。或者,通常语言列表还将包括区域设置代码(例如英语的 EN),这就是它们的排序方式。
使用区域设置代码列表,那么您的订单将根据您的示例是正确的:
- Български (保加利亚语) - BG
- 切斯基 (我猜捷克语/捷克语) - CS
- 德语 - DE
- 荷兰 - 荷兰
- 斯洛文尼亚 - SK
我在芬兰语中使用了这个配置,在这个链接中 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"})