簡體   English   中英

為什么Spring Data MongoDB拒絕在聚合管道中包含$的字段名稱?

[英]Why does Spring Data MongoDB reject a field name containing a $ in an aggregation pipeline?

使用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問題?

參考文檔明確指出 MongoDB官方驅動程序目前不支持它:

重要

MongoDB查詢語言不能總是在字段名稱包含這些字符的文檔上有意義地表達查詢(請參閱SERVER-30575)。 在查詢語言中添加支持之前,使用$和。 不建議使用字段名稱,MongoDB官方驅動程序不支持 {引用}

即Spring Data無法支持,直到支持它成為官方Java驅動程序。

它似乎是一個Spring數據Mongodb問題......應該允許你的字段名稱。

您可以在字段名稱中使用任何非特殊的(UTF8)字符(包含“。”,或以“$”開頭)。

來源: SERVER-3229

您可以嘗試使用BasicDBObject構建項目操作。 下面是一個示例: 如何在Spring Data MongoDB中使用$ arrayElemAt運算符

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM