2017-04-22 263 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

相關問題