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

溫馨提示×

溫馨提示×

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

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

Mongodb用String自定義ID

發布時間:2021-06-22 14:38:26 來源:億速云 閱讀:484 作者:chen 欄目:大數據

本篇內容主要講解“Mongodb用String自定義ID”,感興趣的朋友不妨來看看。本文介紹的方法操作簡單快捷,實用性強。下面就讓小編來帶大家學習“Mongodb用String自定義ID”吧!

import org.bson.Document;
import org.bson.types.ObjectId;
import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
import org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent;
import org.springframework.data.mongodb.core.mapping.event.BeforeSaveEvent;
import org.springframework.stereotype.Component;

@Component
public class BeforeConvertListener extends AbstractMongoEventListener<Object> {
    @Override
    public void onBeforeSave(BeforeSaveEvent<Object> event) {
        Document d = event.getDocument();
        if(d==null){  //不太可能
            return;
        }
        Object _id = d.get("_id");
        if (_id == null) {
            event.getDocument().put("_id", new ObjectId().toString());
        } else if (_id instanceof ObjectId) {
            event.getDocument().put("_id", _id.toString());
        }
    }
}

通過監聽器 , 保存的時候,把 ObjectId 類型的id都轉成 Stirng, 如果是空的,就自己加一個String類型的id.

But 有一個問題, 查詢,或者刪除的時候, 如果String 字符串是一個合法的 ObjectId 的形式。 Spring Data Mongo 會自動轉成 ObjectId 去查詢或刪除。

這樣就找不到記錄了。

https://stackoverflow.com/questions/14329175/prevent-spring-data-for-mongo-to-convert-ids-to-objectid

這里介紹的一個方式是 拋異常, 還沒試過。 看著拋異常就不太想用。 

public class CustomMongoConverter extends MappingMongoConverter {
    public CustomMongoConverter(MongoDbFactory mongoDbFactory, MappingContext<? extends MongoPersistentEntity<?>, MongoPersistentProperty> mappingContext) {
        super(mongoDbFactory, mappingContext);
        conversionService.addConverter(new Converter<String, ObjectId>() {
            @Override
            public ObjectId convert(String source) {
                throw new RuntimeException();
            }
        });
    }
}

還沒結束, 估計要放棄的節奏,就用 ObjectId 當主鍵。 

import cn.hutool.core.lang.UUID;
import cn.hutool.core.util.StrUtil;
import org.bson.Document;
        import org.bson.types.ObjectId;
        import org.springframework.data.mongodb.core.mapping.event.AbstractMongoEventListener;
        import org.springframework.data.mongodb.core.mapping.event.BeforeConvertEvent;
        import org.springframework.data.mongodb.core.mapping.event.BeforeSaveEvent;
        import org.springframework.stereotype.Component;

@Component
public class BeforeConvertListener extends AbstractMongoEventListener<Object> {
    @Override
    public void onBeforeSave(BeforeSaveEvent<Object> event) {
        Document d = event.getDocument();
        if(d==null){  //不太可能
            return;
        }
        Object _id = d.get("_id");
        if (_id == null) {
            event.getDocument().put("_id", UUID.fastUUID().toString()/*StrUtil.reverse(new ObjectId().toString())*/);
        } else if (_id instanceof ObjectId) {
            event.getDocument().put("_id",  UUID.fastUUID().toString()/* StrUtil.reverse(_id.toString())*/);
        }
    }
}

之前一個項目用了 ObjectId ,感覺沒啥用。 還容易出錯。 比如前臺傳的String, 查詢的時候忘記轉為 ObjectId了...

最后,反正是不用 ObjectId了, 只要 String 不符合 ObjectId spring 就不會自動轉換, 建議就用 UUID字符串 替代。這樣查詢刪除也沒問題。

或者加一個字符串,改變長度就行。

 Object _id = d.get("_id");
        if (_id == null) {
            event.getDocument().put("_id", new ObjectId().toString()+"c");
        } else if (_id instanceof ObjectId) {
            event.getDocument().put("_id",  _id.toString()+"c");
        }

debug看一下, 他這個轉換的判斷邏輯是啥,

判斷邏輯就是是不是合法的 ObjectId.

Mongodb用String自定義ID

到此,相信大家對“Mongodb用String自定義ID”有了更深的了解,不妨來實際操作一番吧!這里是億速云網站,更多相關內容可以進入相關頻道進行查詢,關注我們,繼續學習!

向AI問一下細節

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

AI

紫金县| 蓬安县| 淮阳县| 石屏县| 桐城市| 和龙市| 庄河市| 道真| 荣昌县| 郎溪县| 西乌| 永新县| 张家口市| 梁平县| 台北县| 嵊泗县| 宁南县| 张掖市| 涡阳县| 大关县| 新竹县| 西吉县| 察哈| 英吉沙县| 手游| 南昌县| 安平县| 广灵县| 巴马| 长武县| 永川市| 白山市| 鸡泽县| 伊通| 韶关市| 土默特右旗| 宁国市| 子洲县| 汝南县| 富源县| 南和县|