如何在Phalcon的Collection::aggregate()的$sort中设置匈牙利语locale
如何在MongoDB聚合的$sort阶段设置匈牙利语(hu)排序规则
没问题!要让你的聚合管道按照匈牙利语的排序顺序(比如aábc...z而非abc...zá)排列,你需要用到MongoDB的**collation(排序规则)**功能,指定locale: 'hu'即可。下面针对你的PHP聚合管道给出两种可行的修改方案:
方式1:给整个聚合操作设置全局collation
这种方式会让整个聚合过程中所有涉及排序的逻辑都遵循匈牙利语规则,最适合你的场景:
$pipeline = [ [ '$match' => [ '$and' => [ ['aktiv' => true], ['aktivGondozott' => true] ] ] ], [ '$project' => [ '_id' => 1, 'alapadatok' => ['$arrayElemAt' => ['$alapadatok', 0]] ] ], [ '$project' => [ '_id' => 1, 'teljesNev' => '$alapadatok.szuletesiTeljesNev', 'szuletesiDatum' => '$alapadatok.szuletesiIdo' ] ], [ '$sort' => ['teljesNev' => 1] ], [ '$skip' => 380 ], [ '$limit' => 20 ] ]; // 在aggregate方法的第二个参数中添加collation配置 $result = $collection->aggregate($pipeline, [ 'collation' => [ 'locale' => 'hu' ] ]);
方式2:仅在$sort阶段指定collation
如果你只需要这个特定的$sort阶段使用匈牙利语排序,也可以直接在该阶段内附加collation配置(注意:要求MongoDB版本≥3.4):
// 修改后的$sort阶段(替换原管道中的第3个元素) [ '$sort' => ['teljesNev' => 1], '$collation' => ['locale' => 'hu'] ]
注意事项
- 确保你的MongoDB版本至少是3.4,collation功能是从这个版本开始引入的。
- 匈牙利语的collation会自动处理带重音的字符排序,完全符合你需要的
aábc...z顺序。
内容的提问来源于stack exchange,提问作者Apuka73
相关产品推荐
相关产品推荐

