2

我有一个数据集,其中包含一个语言列表,每种语言都是用呈现的语言编写的

例如

  • 德语
  • 荷兰
  • 斯洛文契纳
  • 捷克
  • Български

问题是当我对语言进行排序时,我得到了上面列出的列表。不管多么自然

  • Български
  • 捷克
  • 德语
  • 荷兰
  • 斯洛文契纳

你会如何建议这样做?

一个是创建一个排序字段,但我有另一个包含 15.000 个文档的集合,并且为此创建一个排序索引需要做很多工作。

4

2 回答 2

4

MongoDB 没有基于区域设置的排序,而是仅使用 Unicode 代码点排序。这适用于标准英语字母表,但显然不适用于其他语言。此处正在跟踪此问题,可以在此处找到解决方法

我的回答取自此处发布的关于瑞典字母排序的 Google Groups 问题。如果您想了解更多关于 Unicode Collat​​ion 的信息,可以查看Unicode Technical Standard

一个建议是将您的数据提取到一种可以正确处理 Unicode 排序规则的语言中,然后从那里应用您的排序字段。或者,通常的语言列表还包括一个区域设置代码(例如英语的 EN),这就是它们的排序方式。

根据您的示例,使用区域设置代码列表,您的订单将是正确的:

  1. Български (保加利亚语) - BG
  2. Česky(我猜是捷克语/Česka)- CS
  3. 德语 - DE
  4. 荷兰 - NL
  5. 斯洛文尼亚 - SK
于 2013-10-29T21:32:14.603 回答
0

我在 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"})
于 2020-05-27T04:00:08.417 回答