java - 在 Java 中使用 ObjectId 作为字符串(手册引用)与 spring-data mongodb

标签 java spring mongodb spring-data

在 MongoDB 文档中,他们建议使用 ObjecId 进行手动引用。 请参阅https://docs.mongodb.com/manual/reference/database-references/#document-references

original_id = ObjectId()

db.places.insert({
    "_id": original_id,
    "name": "Broadway Center",
    "url": "bc.example.net"
})

db.people.insert({
    "name": "Erin",
    "places_id": original_id,
    "url":  "bc.example.net/Erin"
})

我正在使用spring-data-mongodb,我正在寻找的是一个像这样定义的People类:

@Document
public class People {

    private String name;
    @Reference // or any Annotation to convert an ObjectId to a String
    private String placesId; 
    private String url;
}

如何在 mongoDB 中将“places_id”作为 ObjectId 但映射到 POJO 中的字符串?

我期望有一个像@Reference这样的注释,但它似乎没有实现。

我不明白为什么我们在 spring-data-mongodb 中没有这种注释。我不想实现像 spring documentation 中建议的显式转换器。对于所有使用手动引用的文档。 也许这不是正确的方法。

我错过了什么吗?

更新:

我喜欢只使用 String 而不是 ObjectId 的 POJO 的想法。假设我有一个像这样的Place类:

@Document
public class Place {
  @Id
  private String id;
  private String name;
}

place.getId() 将是一个字符串,但 people.getPlaceId() 将是一个 ObjectId。我想避免这种不必要的映射。

最佳答案

解决方案是:

import org.springframework.data.mongodb.core.mapping.Field;
import org.springframework.data.mongodb.core.mapping.FieldType;

public class People {

    @Field(targetType = FieldType.OBJECT_ID)
    private String placesId; 
}

这会将 POJO 字符串映射到 MongoDB 中的 ObjectId。

关于java - 在 Java 中使用 ObjectId 作为字符串(手册引用)与 spring-data mongodb,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48010606/

相关文章:

node.js - NodeJS 和 MongoDB : Is there a way to listen to a collection and have an callback be called when a collection has new document?

json - MongoDB 更改 DBrefs

java - 我收到以下错误有人可以指导它到底是什么吗?

Java 泛型 .. 构造函数 header 中的类名后面不允许输入参数

java - Spring Boot 在启动时使用构造函数参数初始化 bean

spring - 在 Spring STS 中通过 maven 项目连接到 postgreSQL

java - 是 Spring Data Mongodb,我如何在不通过 ID 的情况下从另一个文档引用一个文档

java - 如何更改 JTextArea 中的文本颜色?

Java - 打印 HTML 元素的任何细节

java - 在 RestTemplate 解码期间忽略 xml 命名空间