2017-04-22 258 views
1

我正在执行查询以从我的书籍集合中提取属性“titlu”的不同第一个字母,以便将基于他们的“titlu”属性的第一个字母。我有一些标题与UTF-8字符开始,像我,T,S,等,我得到这个错误:

enter image description here

最明显的问题是:我如何才能摆脱错误的? 有两个可接受的选择:

  1. 理想情况下,我应该能够显示I,S,T,等
  2. 如果没有可能,这也是OK显示I,S,T代替,而组合在一起首先是我组Î标题,标题以S开始在S组等

然而,转换必须在蒙戈查询完成,因为我也需要冠军的次数。 (对于解决方案#2,我们需要字母I,例如总结出现以I +以Î开始的标题的标题的出现)。

回答

2

你应该使用$substrCP,而不是$substr$substrCP MongoDB中3.4引入来解决这样的问题,因为$substr从MongoDB的文档,只为ASCII字符

工作:

$substrCP

Returns the substring of a string. The substring starts with the character at the specified UTF-8 code point (CP) index (zero-based) in the string for the number of code points specified.

所以你的查询是:

db.carte.aggregate([ 
    {$project: { 
     preview: {$substrCP: ["$titlu", 0, 1]} 
    } 
    } 
]) 
+0

非常棒,谢谢!用S结果分组Ş任何方式?或者也许是一种自定义排序,以便字母顺序为A,Ă,Î,B ... I,Î,... S,Ş等等? – hypercube

+0

查看[**排序规则**](https://docs.mongodb.com/manual/reference/collat​​ion/):在您的汇总查询中指定与第一级的排序规则 – felix

+0

这并不重要,我可以随时使用java方面进一步定购/分组。 – hypercube

相关问题