it编程 > 数据库 > mongodb

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

15人参与 2025-05-22 mongodb

在 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字段的资料请关注代码网其它相关文章!

(0)

您想发表意见!!点此发布评论

推荐阅读

基于MongoDB实现文件的分布式存储

05-21

深入解析MongoDB中insert into select写法

06-13

关于MongoDB图片URL存储异常问题以及解决

04-25

Fedora系统安装MongoDB的详细指南

04-08

安装MongoDB过程中出现权限问题的解决策略

04-07

如何在Linux上卸载MongoDB并清理残留文件

04-06

猜你喜欢

版权声明:本文内容由互联网用户贡献,该文观点仅代表作者本人。本站仅提供信息存储服务,不拥有所有权,不承担相关法律责任。 如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件至 2386932994@qq.com 举报,一经查实将立刻删除。

发表评论