如何使用Spring Data Mongo在MongoDB文档中添加自定义主键

0s0u357o  于 2023-11-17  发布在  Go
关注(0)|答案(1)|浏览(260)

我有一个MongoDB实体如下。

public class Test {
 @Id
 private String id;
 private String name;
 private String age;
}

字符串
现在,代替“id”,它在文档中创建一个主键“_id”;我想让name成为我文档中的主id。我怎么才能实现呢?请注意,我必须在我的类中保留“private String id”字段。我已经尝试在private String name之上添加@Field(“name”)annotation,但它不起作用。

ut6juiuv

ut6juiuv1#

恐怕不能从文档中删除_id字段,因为它是MongoDB中的 mandatory 字段。您可以告诉客户端使用什么值来填充_id,但您不能完全删除该字段。
不过,好消息是,您可以将任何字段标记为主键。只需将@Id注解添加到name字段。这将在MongoDB文档中内部Mapname_id
在你的例子中,你必须像这样构建你的文档:

public class Test {

  @Id // Maps "name" to "_id" in the MongoDB document
  private String name;

  private String id;
  private String age;

}

字符串
下面是MongoDB文档中关于为什么_id * 必须 * 是主键的相关页面:
每个MongoDB文档中都需要一个字段。_id字段必须具有唯一值。您可以将_id字段视为文档的主键。如果您创建一个没有_id字段的新文档,MongoDB会自动创建该字段并分配一个唯一的BSON ObjectId。
要了解Sping Boot MongoDB库如何将值Map到_id,请参考Spring MongoDB documentation
下面概述了将Map到“_id”文档字段的字段:

  • 用@Id(org.springframework.data.annotation.Id)注解的字段将Map到'_id'字段。
  • 没有注解但命名为id的字段将Map到'_id'字段。

希望这对你有帮助!
干杯,塔哈尔

相关问题