MongoDB

关注公众号 jb51net

关闭
首页 > 数据库 > MongoDB > 映射MongoDB的_id字段

映射MongoDB _id字段的几种常见方式

作者:冰糖心书房

在 Spring Data MongoDB 中,将 Java POJO 的字段映射到 MongoDB 文档的 _id 字段非常直接,主要通过 @Id 注解(org.springframework.data.annotation.Id)来完成,本文介绍了映射 MongoDB _id 字段的几种常见方式和关键点,需要的朋友可以参考下

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

以下是映射 MongoDB _id 字段的几种常见方式和关键点:

1、使用 String 类型作为 ID (最常见):

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;
    }
}

当你保存一个新的 MyEntity 实例且 id 字段为 null 时:

MyEntity entity = new MyEntity();
entity.setName("Test Entity");
mongoTemplate.save(entity); // entity.getId() 现在会有一个自动生成的 ObjectId 字符串
System.out.println(entity.getId()); // 例如:"60c72b941f4b1a3e4c8e4f3a"

2、使用 org.bson.types.ObjectId 类型作为 ID:

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):

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时:

Item item = new Item();
item.setItemId(12345L); // 必须手动设置 ID
item.setDescription("Custom ID Item");
mongoTemplate.save(item);

4、Java 字段名不一定是 “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;
    }
    // ...
}

关键点总结:

选择哪种 ID 类型取决于你的具体需求:

在大多数 Spring Boot 应用中,使用 String 类型并让 MongoDB 自动生成 ObjectId 是最简单和最常见的做法。

以上就是映射MongoDB _id字段的几种常见方式的详细内容,更多关于映射MongoDB的_id字段的资料请关注脚本之家其它相关文章!

您可能感兴趣的文章:
阅读全文