欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

以下是映射 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庫(kù)提供的 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)文章

  • SpringBoot整合redis及mongodb的詳細(xì)過程

    SpringBoot整合redis及mongodb的詳細(xì)過程

    這篇文章主要介紹了SpringBoot整合redis及mongodb,本節(jié)我們來(lái)把關(guān)注點(diǎn)轉(zhuǎn)向NoSQL,文章結(jié)合示例代碼給大家講解的非常詳細(xì),需要的朋友可以參考下
    2022-10-10
  • yum源安裝mongodb圖文教程

    yum源安裝mongodb圖文教程

    本文給大家介紹的是使用yum源安裝MongoDB的詳細(xì)的圖文教程,小伙伴們跟著教程一步步操作即可,希望大家喜歡
    2018-09-09
  • MongoDB快速入門筆記(七)MongoDB的用戶管理操作

    MongoDB快速入門筆記(七)MongoDB的用戶管理操作

    這篇文章主要介紹了MongoDB快速入門筆記(七)MongoDB的用戶管理操作 的相關(guān)資料,需要的朋友可以參考下
    2016-06-06
  • 使用命令方式安裝MongoDB指南(Windows、Linux)

    使用命令方式安裝MongoDB指南(Windows、Linux)

    這篇文章主要介紹了使用命令方式安裝MongoDB指南,本文分別介紹Windows、Linux下使用命令的方式安裝mongodb,需要的朋友可以參考下
    2015-04-04
  • MongoDB社區(qū)版和企業(yè)版的差別對(duì)照表

    MongoDB社區(qū)版和企業(yè)版的差別對(duì)照表

    這篇文章主要介紹了MongoDB社區(qū)版和企業(yè)版的差別對(duì)照表,本文同時(shí)提供了中文和英文版的對(duì)照表,需要的朋友可以參考下
    2014-10-10
  • 深入講解MongoDB的慢日志查詢(profile)

    深入講解MongoDB的慢日志查詢(profile)

    在MySQL中,慢查詢?nèi)罩臼墙?jīng)常作為我們優(yōu)化數(shù)據(jù)庫(kù)的依據(jù),那在MongoDB中是否有類似的功能呢?答案是肯定的,那就是MongoDB Database Profiler。下面這篇文章主要給大家介紹了關(guān)于MongoDB慢日志查詢(profile)的相關(guān)資料,需要的朋友可以參考下。
    2017-06-06
  • MongoDB卸載安裝的詳細(xì)安裝教程

    MongoDB卸載安裝的詳細(xì)安裝教程

    MongoDB是一個(gè)是一個(gè)基于分布式文件存儲(chǔ)的數(shù)據(jù)庫(kù),下面這篇文章主要給大家介紹了關(guān)于MongoDB卸載安裝的相關(guān)資料,文中通過實(shí)例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2023-04-04
  • Mongoose 在egg中的使用詳解

    Mongoose 在egg中的使用詳解

    這篇文章主要介紹了Mongoose 在egg中的使用,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-06-06
  • ubuntu安裝mongodb創(chuàng)建賬號(hào)和庫(kù)及添加坐標(biāo)索引的流程分析

    ubuntu安裝mongodb創(chuàng)建賬號(hào)和庫(kù)及添加坐標(biāo)索引的流程分析

    這篇文章主要介紹了ubuntu安裝mongodb創(chuàng)建賬號(hào)和庫(kù)及添加坐標(biāo)索引的流程分析,本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2020-10-10
  • Ubuntu中安裝MongoDB及執(zhí)行一些簡(jiǎn)單操作筆記

    Ubuntu中安裝MongoDB及執(zhí)行一些簡(jiǎn)單操作筆記

    這篇文章主要介紹了Ubuntu中安裝MongoDB及執(zhí)行一些簡(jiǎn)單操作筆記,本文同時(shí)給出了查看已有數(shù)據(jù)庫(kù)、刪除數(shù)據(jù)庫(kù)、創(chuàng)建數(shù)據(jù)庫(kù)等操作命令實(shí)例,需要的朋友可以參考下
    2014-09-09

最新評(píng)論