三國(guó)紛爭(zhēng)
2022-07-06 18:43:06
使用 Spring Data 的ProjectionOperation類在 MongoDB 上創(chuàng)建聚合查詢時(shí),使用帶有“$”(例如“test$”)字符的字段會(huì)導(dǎo)致IllegalArgumentException驗(yàn)證 spring 數(shù)據(jù) mongodb 源時(shí),我注意到在AggregationField類的構(gòu)造函數(shù)中執(zhí)行了字段名稱的清理。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 中字段的命名不鼓勵(lì)使用“$”字符,或者這是 Spring Data 問(wèn)題?
2 回答

滄海一幻覺(jué)
TA貢獻(xiàn)1824條經(jīng)驗(yàn) 獲得超5個(gè)贊
參考文檔明確指出,官方 MongoDB 驅(qū)動(dòng)程序目前不支持它:
重要的
MongoDB 查詢語(yǔ)言不能總是有意義地表達(dá)對(duì)字段名稱包含這些字符的文檔的查詢(請(qǐng)參閱 SERVER-30575)。在查詢語(yǔ)言中添加支持之前,使用 $ 和 . 不推薦使用 in 字段名稱,官方 MongoDB 驅(qū)動(dòng)程序也不支持。{引用}
即 Spring Data 不能支持它,直到支持它成為官方 Java 驅(qū)動(dòng)程序。

躍然一笑
TA貢獻(xiàn)1826條經(jīng)驗(yàn) 獲得超6個(gè)贊
這似乎是一個(gè)Spring數(shù)據(jù)Mongodb的問(wèn)題......你的字段名應(yīng)該是允許的。
您可以在字段名稱中使用任何不特殊的 (UTF8) 字符(包含“.”或以“$”開(kāi)頭)。
您可以嘗試使用BasicDBObject構(gòu)建您的項(xiàng)目操作。這是一個(gè)示例:如何在 Spring Data MongoDB 中使用 $arrayElemAt 運(yùn)算符
添加回答
舉報(bào)
0/150
提交
取消