Mongodb MUGODB错误$UBLIMULTS:无效范围,结束索引位于UTF-8字符的中间
我正在做一个查询,以从我的藏书中提取属性titlu的不同首字母,以便根据其titlu属性的首字母对书籍进行分组。我有一些以UTF-8字符开头的标题,如Î、Ț、Ș等,我得到了以下错误: 一个显而易见的问题是:我如何摆脱这个错误? 有两种可接受的选择: 理想情况下,我应该能够显示Î、Ș、Ț等 如果不可能,也可以显示I、s、T,并将I组中以Î开头的标题与s组中以Ș开头的标题组合在一起,等等。 但是,转换必须在mongo查询中完成,因为我还需要标题的计数。对于解决方案2,我们需要字母I,例如,将以I开头的标题的出现次数与以Î开头的标题的出现次数相加。您应该使用$substrCP而不是$substr$mongodb 3.4中引入了substrCP来解决这类问题,因为$substr仅适用于ASCII字符 来自mongodb文档: $substrCP 返回字符串的子字符串。子字符串以指定UTF-8代码点处的字符开头,CP索引为零,以中为基础 指定的代码点数量的字符串 所以你的问题是:Mongodb MUGODB错误$UBLIMULTS:无效范围,结束索引位于UTF-8字符的中间,mongodb,utf-8,aggregation-framework,spring-data-mongodb,Mongodb,Utf 8,Aggregation Framework,Spring Data Mongodb,我正在做一个查询,以从我的藏书中提取属性titlu的不同首字母,以便根据其titlu属性的首字母对书籍进行分组。我有一些以UTF-8字符开头的标题,如Î、Ț、Ș等,我得到了以下错误: 一个显而易见的问题是:我如何摆脱这个错误? 有两种可接受的选择: 理想情况下,我应该能够显示Î、Ș、Ț等 如果不可能,也可以显示I、s、T,并将I组中以Î开头的标题与s组中以Ș开头的标题组合在一起,等等。 但是,转换必须在mongo查询中完成,因为我还需要标题的计数。对于解决方案2,我们需要字母I,例如,将以I开头
db.carte.aggregate([
{$project: {
preview: {$substrCP: ["$titlu", 0, 1]}
}
}
])
您可以在线试用:您应该使用$substrCP而不是$substr$mongodb 3.4中引入了substrCP来解决这类问题,因为$substr仅适用于ASCII字符
来自mongodb文档:
$substrCP
返回字符串的子字符串。子字符串以指定UTF-8代码点处的字符开头,CP索引为零,以中为基础
指定的代码点数量的字符串
所以你的问题是:
db.carte.aggregate([
{$project: {
preview: {$substrCP: ["$titlu", 0, 1]}
}
}
])
您可以在线试用:非常好,谢谢!有没有办法将Ș与S的结果进行分组?或者可能是一种自定义排序,以便字母顺序为a、Ă、Î、B…I、Î、…S、Ș等?请看:只需在聚合查询中指定一个级别为1的排序规则。这并不重要,我始终可以使用java端进一步排序/分组。根据这个问题,spring data mongo db不支持排序规则。就像我说的,我会做一个手动排序的结果。我想我可以直接使用蒙哥驱动程序来执行查询,但这是我必须考虑的,因为使用Mango驱动程序执行Mango任务稍微困难一些。有没有办法将Ș与S的结果进行分组?或者可能是一种自定义排序,以便字母顺序为a、Ă、Î、B…I、Î、…S、Ș等?请看:只需在聚合查询中指定一个级别为1的排序规则。这并不重要,我始终可以使用java端进一步排序/分组。根据这个问题,spring data mongo db不支持排序规则。就像我说的,我会做一个手动排序的结果。我想我可以直接使用蒙哥驱动程序来执行查询,但这是我必须考虑的问题,因为使用Mango驱动程序执行Mango任务稍微困难一些。