最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

映射MongoDB _id字段的幾種常見方式

 更新時(shí)間:2025年05月22日 09:42:19   作者:冰糖心書房  
在 Spring Data MongoDB 中,將 Java POJO 的字段映射到 MongoDB 文檔的 _id 字段非常直接,主要通過 @Id 注解(org.springframework.data.annotation.Id)來完成,本文介紹了映射 MongoDB _id 字段的幾種常見方式和關(guān)鍵點(diǎn),需要的朋友可以參考下

在 Spring Data MongoDB 中,將 Java POJO 的字段映射到 MongoDB 文檔的 _id 字段非常直接,主要通過 @Id 注解(org.springframework.data.annotation.Id)來完成。

以下是映射 MongoDB _id 字段的幾種常見方式和關(guān)鍵點(diǎn):

1、使用 String 類型作為 ID (最常見):

  • 當(dāng) @Id 注解的字段類型是 String 時(shí),Spring Data MongoDB 會(huì)將其視為 MongoDB ObjectId 的字符串表示形式。
  • 如果在保存新文檔時(shí)此 String 字段為 null,MongoDB Java 驅(qū)動(dòng)程序會(huì)自動(dòng)生成一個(gè)新的 ObjectId,然后 Spring Data MongoDB 會(huì)將其轉(zhuǎn)換為字符串并賦值給該字段。
  • 這是最推薦和最方便的方式,因?yàn)樽址问降?ID 更容易在 API、URL 和日志中使用。
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "my_entities")
public class MyEntity {

    @Id
    private String id; // 將映射到 MongoDB 的 _id 字段

    private String name;

    // Constructors, getters, setters
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}

當(dāng)你保存一個(gè)新的 MyEntity 實(shí)例且 id 字段為 null 時(shí):

MyEntity entity = new MyEntity();
entity.setName("Test Entity");
mongoTemplate.save(entity); // entity.getId() 現(xiàn)在會(huì)有一個(gè)自動(dòng)生成的 ObjectId 字符串
System.out.println(entity.getId()); // 例如:"60c72b941f4b1a3e4c8e4f3a"

2、使用 org.bson.types.ObjectId 類型作為 ID:

  • 你可以直接使用 MongoDB BSON庫提供的 ObjectId 類型。
  • 同樣,如果在保存新文檔時(shí)此 ObjectId 字段為 null,驅(qū)動(dòng)程序會(huì)自動(dòng)生成一個(gè)新的 ObjectId
import org.bson.types.ObjectId;
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "products")
public class Product {

    @Id
    private ObjectId id; // 直接使用 ObjectId 類型

    private String productName;

    // Constructors, getters, setters
    public ObjectId getId() {
        return id;
    }

    public void setId(ObjectId id) {
        this.id = id;
    }

    public String getProductName() {
        return productName;
    }

    public void setProductName(String productName) {
        this.productName = productName;
    }
}

3、使用其他 Java 類型作為 ID (例如 Long, BigInteger):

  • 你也可以使用其他原始類型或?qū)ο箢愋停ㄈ?nbsp;LongBigInteger)作為 _id
  • 重要: 如果使用這些類型,MongoDB 不會(huì)自動(dòng)為你生成 ID。你必須在保存文檔之前自己提供一個(gè)唯一的 ID 值。如果插入時(shí)該字段為 null (對(duì)于對(duì)象類型) 或默認(rèn)值 (對(duì)于原始類型且你未設(shè)置),可能會(huì)導(dǎo)致錯(cuò)誤或意外行為,具體取決于驅(qū)動(dòng)程序和服務(wù)器版本。
  • 這種方式適用于你有外部系統(tǒng)生成 ID,或者 ID 具有特定業(yè)務(wù)含義的情況。
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;
import java.math.BigInteger;

@Document(collection = "items")
public class Item {

    @Id
    private Long itemId; // 使用 Long 類型,需要自己保證唯一性并賦值

    // 或者
    // @Id
    // private BigInteger itemId; // 使用 BigInteger,需要自己保證唯一性并賦值

    private String description;

    // Constructors, getters, setters
    public Long getItemId() {
        return itemId;
    }

    public void setItemId(Long itemId) {
        this.itemId = itemId;
    }

    public String getDescription() {
        return description;
    }

    public void setDescription(String description) {
        this.description = description;
    }
}

使用自定義ID時(shí):

Item item = new Item();
item.setItemId(12345L); // 必須手動(dòng)設(shè)置 ID
item.setDescription("Custom ID Item");
mongoTemplate.save(item);

4、Java 字段名不一定是 “id”:

  • 被 @Id 注解的 Java 字段的名稱可以不是 id。Spring Data MongoDB 依然會(huì)將其映射到 MongoDB 文檔中的 _id 字段。
import org.springframework.data.annotation.Id;
import org.springframework.data.mongodb.core.mapping.Document;

@Document(collection = "books")
public class Book {

    @Id
    private String bookIsbn; // Java 字段名為 "bookIsbn",但它映射到 MongoDB 的 _id

    private String title;

    // Getters and setters
    public String getBookIsbn() {
        return bookIsbn;
    }

    public void setBookIsbn(String bookIsbn) {
        this.bookIsbn = bookIsbn;
    }
    // ...
}

關(guān)鍵點(diǎn)總結(jié):

  • @Id 注解: 是將 Java 字段標(biāo)記為 MongoDB _id 的核心。
  • 自動(dòng)生成:
    • 僅當(dāng) @Id 字段類型為 String 或 org.bson.types.ObjectId,并且在插入新文檔時(shí)該字段值為 null 時(shí),ID 才會(huì)由 MongoDB 驅(qū)動(dòng)自動(dòng)生成。
    • 其他類型(如 LongIntegerBigInteger)需要你在應(yīng)用程序中手動(dòng)賦值并確保其唯一性。
  • 不可變性: MongoDB 中的 _id 字段一旦設(shè)置,就不能被修改。嘗試更新 _id 會(huì)導(dǎo)致操作失敗或創(chuàng)建一個(gè)新文檔(取決于操作類型)。
  • 唯一性_id 在其集合中必須是唯一的。MongoDB 會(huì)自動(dòng)為 _id 字段創(chuàng)建唯一索引。
  • @Field("_id"): 通常不需要。@Id 注解本身就隱含了該 Java 字段映射到 BSON 文檔的 _id 鍵。顯式使用 @Field("_id") 是多余的。

選擇哪種 ID 類型取決于你的具體需求:

  • String (ObjectId 字符串): 通用,方便,推薦用于大多數(shù)場(chǎng)景。
  • ObjectId: 如果你需要在 Java 代碼中直接操作 ObjectId 對(duì)象(例如,獲取時(shí)間戳部分)。
  • Long / BigInteger / 其他自定義類型: 當(dāng) ID 有特定業(yè)務(wù)含義或由外部系統(tǒng)生成時(shí)。

在大多數(shù) Spring Boot 應(yīng)用中,使用 String 類型并讓 MongoDB 自動(dòng)生成 ObjectId 是最簡(jiǎn)單和最常見的做法。

以上就是映射MongoDB _id字段的幾種常見方式的詳細(xì)內(nèi)容,更多關(guān)于映射MongoDB的_id字段的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!

相關(guān)文章

  • mongodb主從復(fù)制_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    mongodb主從復(fù)制_動(dòng)力節(jié)點(diǎn)Java學(xué)院整理

    這篇文章主要為大家詳細(xì)介紹了mongodb主從復(fù)制的相關(guān)資料,討論mongodb的部署技術(shù),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2017-08-08
  • MongoDB中多表關(guān)聯(lián)查詢($lookup)的深入講解

    MongoDB中多表關(guān)聯(lián)查詢($lookup)的深入講解

    NoSql的多表關(guān)聯(lián)一直是比較復(fù)雜的問題,下面這篇文章主要給大家介紹了關(guān)于MongoDB中多表關(guān)聯(lián)查詢($lookup)的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2018-12-12
  • 在PyCharm中安裝Mongo Plugin的詳細(xì)教程

    在PyCharm中安裝Mongo Plugin的詳細(xì)教程

    這篇文章主要介紹了在PyCharm中安裝Mongo Plugin的詳細(xì)教程,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-11-11
  • MongoDB的分布式存儲(chǔ)架構(gòu)詳解

    MongoDB的分布式存儲(chǔ)架構(gòu)詳解

    MongoDB分片技術(shù)通過將數(shù)據(jù)分割存儲(chǔ)在多臺(tái)服務(wù)器上,實(shí)現(xiàn)數(shù)據(jù)的分布式存儲(chǔ),滿足大數(shù)據(jù)量的需求,分片架構(gòu)包括前端路由服務(wù)器、配置服務(wù)器和分片服務(wù)器,本文介紹MongoDB的分布式存儲(chǔ)架構(gòu),感興趣的朋友跟隨小編一起看看吧
    2025-12-12
  • mongodb基礎(chǔ)之用戶權(quán)限管理實(shí)例教程

    mongodb基礎(chǔ)之用戶權(quán)限管理實(shí)例教程

    這篇文章主要給大家介紹了關(guān)于mongodb基礎(chǔ)之用戶權(quán)限管理的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2018-06-06
  • MongoDB 內(nèi)存管理相關(guān)總結(jié)

    MongoDB 內(nèi)存管理相關(guān)總結(jié)

    這篇文章主要介紹了MongoDB 內(nèi)存管理的相關(guān)資料,幫助大家更好的理解和學(xué)習(xí)使用MongoDB數(shù)據(jù)庫,感興趣的朋友可以了解下
    2021-03-03
  • MongoDB為用戶設(shè)置訪問權(quán)限

    MongoDB為用戶設(shè)置訪問權(quán)限

    MongoDB已經(jīng)使用很長一段時(shí)間了,基于MongoDB的數(shù)據(jù)存儲(chǔ)也一直沒有使用到權(quán)限訪問 MongoDB默認(rèn)設(shè)置為無權(quán)限訪問限制
    2012-11-11
  • Windows系統(tǒng)啟動(dòng)MongoDB報(bào)錯(cuò)無法連接服務(wù)器的問題及解決方案

    Windows系統(tǒng)啟動(dòng)MongoDB報(bào)錯(cuò)無法連接服務(wù)器的問題及解決方案

    在Windows系統(tǒng)中啟動(dòng)MongoDB時(shí)遇到連接拒絕的錯(cuò)誤,通常是因?yàn)榉?wù)未運(yùn)行或配置問題,本文給大家分享Windows系統(tǒng)啟動(dòng)MongoDB報(bào)錯(cuò)無法連接服務(wù)器的問題及解決方案,一起看看吧
    2024-10-10
  • 解決MongoDB占用內(nèi)存過大頻繁死機(jī)的方法詳解

    解決MongoDB占用內(nèi)存過大頻繁死機(jī)的方法詳解

    這篇文章主要介紹了解決MongoDB占用內(nèi)存過大頻繁死機(jī)的方法詳解,需要的朋友可以參考下
    2020-02-02
  • MongoDB?插入操作機(jī)制詳解之insert()?與?nInserted?的行為剖析(推薦)

    MongoDB?插入操作機(jī)制詳解之insert()?與?nInserted?的行為剖析(推薦)

    本文將以一段常見的MongoDB?Shell腳本為切入點(diǎn),深入探討insert()?方法的工作機(jī)制、返回值含義,并對(duì)比insertMany()的差異,幫助開發(fā)者避免常見誤解,寫出更高效、更可控的數(shù)據(jù)寫入代碼,感興趣的朋友一起看看吧
    2025-11-11

最新評(píng)論

平谷区| 鹤庆县| 九江县| 汝城县| 通化市| 佳木斯市| 游戏| 宁城县| 武邑县| 喜德县| 行唐县| 黄大仙区| 东阿县| 安化县| 河北省| 罗定市| 同仁县| 精河县| 克拉玛依市| 彭山县| 莱州市| 祁连县| 改则县| 阿城市| 西乡县| 建阳市| 常山县| 峨边| 嘉鱼县| 鄂托克前旗| 河间市| 新化县| 伊春市| 曲水县| 清涧县| 修文县| 锦屏县| 南和县| 图木舒克市| 湖州市| 光泽县|