为了账号安全,请及时绑定邮箱和手机立即绑定

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

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

三国纷争 2022-07-06 18:43:06
使用 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 问题?
查看完整描述

2 回答

?
沧海一幻觉

TA贡献1824条经验 获得超5个赞

参考文档明确指出,官方 MongoDB 驱动程序目前不支持它:

重要的

MongoDB 查询语言不能总是有意义地表达对字段名称包含这些字符的文档的查询(请参阅 SERVER-30575)。在查询语言中添加支持之前,使用 $ 和 . 不推荐使用 in 字段名称,官方 MongoDB 驱动程序也不支持。{引用}

即 Spring Data 不能支持它,直到支持它成为官方 Java 驱动程序。


查看完整回答
反对 回复 2022-07-06
?
跃然一笑

TA贡献1826条经验 获得超6个赞

这似乎是一个Spring数据Mongodb的问题......你的字段名应该是允许的。

您可以在字段名称中使用任何不特殊的 (UTF8) 字符(包含“.”或以“$”开头)。

您可以尝试使用BasicDBObject构建您的项目操作。这是一个示例:如何在 Spring Data MongoDB 中使用 $arrayElemAt 运算符


查看完整回答
反对 回复 2022-07-06
  • 2 回答
  • 0 关注
  • 168 浏览

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号