91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

spring-data-mongodb使用mongoTemplate操作mongoDb時@Indexed注解無效且沒有自動創建索引該怎么辦

發布時間:2021-09-29 09:20:29 來源:億速云 閱讀:950 作者:柒染 欄目:大數據

這篇文章給大家介紹spring-data-mongodb使用mongoTemplate操作mongoDb時@Indexed注解無效且沒有自動創建索引該怎么辦,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

先上代碼 ,下面的 “異常” 代碼是否會自動創建索引呢?

//訂單doc
@Data
@Accessors(chain = true)
@FieldNameConstants
@Document(collection = "order_")
public class Order implements Serializable {

    @Id
    private String id;
    @Indexed
    private String tid;
    @Indexed
    private String tradeId;
    private String status;
    private String created;

}

//使用mongoTemplate做插入操作,按照月份分表

mongoTemplate.insert(orderRecord, mongoTemplate.getCollectionName(Order.class) + month);

答案是 :會的!

那為什么說是異常代碼呢,因為它沒有達到我的預期,這段代碼會有兩個問題:

    1、會在mongodb里邊創建兩個 collection : order_ 和 order_${month}

    2、索引會創建在 “order_” 這個collection里邊,而不會在 “order_${month}”

這個時候答案就很明顯了:自動創建索引的時候 ,讀取的collectionName 是 @Document注解里邊的值,而不是 insert的時候傳入的值。

結論已經有了,就該看看它是怎么把傳入的 collectionName弄丟的了

    通過debug可以找到創建索引相關類以及方法的調用路徑:

spring-data-mongodb使用mongoTemplate操作mongoDb時@Indexed注解無效且沒有自動創建索引該怎么辦

這個是方法簽名:

checkForIndexes((MongoPersistentEntity<?>) entity);

最終只剩下了entity。通過entity的@Document注解來獲取collectionName。細節就不貼圖了,建議去debug下看看源碼。

原因找到了,最終要如何解決當前的問題呢?上代碼:

        //字段索引
        IndexOperations indexOps2 = mongoTemplate.indexOps(orderCollectionName);
        String[] indexFields2 = Arrays.stream(Order.class.getDeclaredFields())
                .filter(f -> f.isAnnotationPresent(Indexed.class))
                .map(Field::getName)
                .toArray(String[]::new);
        for (String indexField : indexFields2) {
            if (StringUtils.hasText(indexField)) {
                indexOps2.ensureIndex(new Index(indexField, Sort.Direction.ASC));
            }
        }

至此,問題解決。

最后別忘了把@Document注解去掉。

關于spring-data-mongodb使用mongoTemplate操作mongoDb時@Indexed注解無效且沒有自動創建索引該怎么辦就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

四平市| 永宁县| 长汀县| 林西县| 曲靖市| 依兰县| 理塘县| 永胜县| 新田县| 页游| 彭阳县| 普安县| 比如县| 崇左市| 汉源县| 克山县| 姚安县| 昆山市| 华阴市| 磴口县| 南宁市| 子洲县| 盘山县| 拉萨市| 凉城县| 新乡县| 南江县| 肃南| 通城县| 泽库县| 浑源县| 嵊州市| 兴国县| 遵义市| 和田市| 马公市| 苏尼特左旗| 郎溪县| 独山县| 都兰县| 广灵县|