Mongodb错误$ substrBytes:无效范围,结束索引位于UTF-8字符的中间

问题描述 投票:1回答:1

我正在进行查询以从我的书籍集合中提取属性“titlu”的不同的第一个字母,以便根据“titlu”属性的第一个字母对书籍进行分组。我有一些以UTF-8字符开头的标题,如Î,Ţ,Ş等,我收到此错误:

enter image description here

显而易见的问题是:我如何摆脱这个错误?有两种可接受的选择:

  1. 理想情况下,我应该能够显示Î,Ş,Ţ等
  2. 如果不可能的话,也可以显示I,S,T代替并将以I组中的Î开头的标题组合在一起,在S组中以Ş开头的标题等。

但是,转换必须在mongo查询中完成,因为我还需要标题的计数。 (对于解决方案#2,我们需要字母I,例如,以I开头出现的标题的出现以及以Î开头的标题的出现)。

mongodb utf-8 aggregation-framework spring-data-mongodb
1个回答
6
投票

你应该使用$substrCP而不是$substr$substrCP是在mongodb 3.4中引入来解决这类问题的,因为$substr只适用于ASCII字符

来自mongodb文档:

$ substrCP

返回字符串的子字符串。子字符串以字符串中指定的UTF-8代码点(CP)索引(从零开始)处的字符开始,用于指定的代码点数。

所以你的查询将是:

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

你可以在网上试试:mongoplayground.net/p/X6Mo1yEhJoI

© www.soinside.com 2019 - 2024. All rights reserved.