猿问

为什么 Spring Data MongoDB 拒绝聚合管道中包含 $ 的字段名称?

使用 Spring Data 的ProjectionOperation类在 MongoDB 上创建聚合查询时,使用带有“$”(例如“test$”)字符的字段会导致IllegalArgumentException


验证 spring 数据 mongodb 源时,我注意到在AggregationField类的构造函数中执行了字段名称的清理。Fields.java 类


private static String cleanUp(String source) {


    if (Aggregation.SystemVariable.isReferingToSystemVariable(source)) {

        return source;

    }


    int dollarIndex = source.lastIndexOf('$');

    return dollarIndex == -1 ? source : source.substring(dollarIndex + 1);

}

MongoDB 中字段的命名不鼓励使用“$”字符,或者这是 Spring Data 问题?


三国纷争
浏览 170回答 2
2回答

沧海一幻觉

参考文档明确指出,官方 MongoDB 驱动程序目前不支持它:重要的MongoDB 查询语言不能总是有意义地表达对字段名称包含这些字符的文档的查询(请参阅 SERVER-30575)。在查询语言中添加支持之前,使用 $ 和 . 不推荐使用 in 字段名称,官方 MongoDB 驱动程序也不支持。{引用}即 Spring Data 不能支持它,直到支持它成为官方 Java 驱动程序。

跃然一笑

这似乎是一个Spring数据Mongodb的问题......你的字段名应该是允许的。您可以在字段名称中使用任何不特殊的 (UTF8) 字符(包含“.”或以“$”开头)。您可以尝试使用BasicDBObject构建您的项目操作。这是一个示例:如何在 Spring Data MongoDB 中使用 $arrayElemAt 运算符
随时随地看视频慕课网APP

相关分类

Java
我要回答