使用 PHP 对带有外来字符的 MongoDb 文档进行排序


Sort MongoDb documents with foreign characters using PHP

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

例如

  • 德语
  • 荷兰
  • 斯洛文奇纳
  • 切斯基
  • Български

问题是当我对语言进行排序时,我会得到上面显示的列表。无论多么自然

  • Български
  • 切斯基
  • 德语
  • 荷兰
  • 斯洛文奇纳

你建议怎么做?

一个是创建一个排序字段,但我有另一个包含 15.000 个文档的集合,并在此上制作排序索引是一项艰巨的工作。

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

我的答案来自此处发布的有关瑞典字母排序的Google网上论坛问题。如果你想阅读更多关于Unicode排序规则的信息,你可以查看Unicode技术标准。

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

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

  1. Български (保加利亚语) - BG
  2. 切斯基 (我猜捷克语/捷克语) - CS
  3. 德语 - DE
  4. 荷兰 - 荷兰
  5. 斯洛文尼亚 - 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"})