Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/jpa/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mongodb MUGODB错误$UBLIMULTS:无效范围,结束索引位于UTF-8字符的中间_Mongodb_Utf 8_Aggregation Framework_Spring Data Mongodb - Fatal编程技术网

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

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开头

我正在做一个查询,以从我的藏书中提取属性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索引为零,以中为基础 指定的代码点数量的字符串

所以你的问题是:

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任务稍微困难一些。