gpt4 book ai didi

mongodb - 使用 mongoTemplate 将 String 字段序列化为 objectId 字段

转载 作者:可可西里 更新时间:2023-11-01 09:55:45 26 4
gpt4 key购买 nike

假设我有一个 pojo

public class example{
private String id;
private String photoId
}

现在保存这个 pojo 的实例时,id 被保存为 objectId。我还希望将 photoId 序列化为 ObjectId。有没有我可以添加到 photoId 的注释这将启用它?

public class example{
@Id
private String id; //default objectId serialization

@MongoType(ObjectId.class) //not real annotation, looking for real one
private String photoId; // enforce ObjectId serialization - what i want

mongoTemplate.insert(examplePojo); //will result as {_id :objectId(), photoId: objectId(...)}

----- 编辑 ------photoId 是 objectId 的字符串表示,例如:

public void saveExample(String id, String photoId){
Example example = new Example(id, photoId);
mongoTemplate.insert(example);
}

感谢您的帮助!

罗伊

最佳答案

你真的想要那个吗?

对象 ID 由 mongodb 生成,带有一些附加信息:

ObjectId is a 12-byte BSON type, constructed using:

  1. 4-byte value representing the seconds since the Unix epoch,
  2. 3-byte machine identifier,
  3. 2-byte process id, and
  4. 3-byte counter, starting with a random value.

您无需生成它。但仍然可以覆盖该功能。

来自 spring-mongodb 文档:

The following outlines what type conversion, if any, will be done on the property mapped to the _id document field when using the MappingMongoConverter, the default for MongoTemplate.

  • An id property or field declared as a String in the Java class will be converted to and stored as an ObjectId if possible using a Spring
    Converter. Valid conversion rules are delegated to
    the MongoDB Java driver. If it cannot be converted to an ObjectId,
    then the value will be stored as a string in the database.
  • An id property or field declared as BigInteger in the Java class will be converted to and stored as an ObjectId using a Spring
    Converter.

但是您可以为自己的类型编写自己的转换器。

也改变

@MongoType(ObjectId.class)@Id。并确保您的自定义 ID 具有一定的值(value),否则 mongodb 将为您创建一个 ObjectID。

同时检查 mongodb manual关于 ObjectIds。

更新

现在的问题是如何处理引用。

这里是手册中的一个小例子。

@Document
public class Account {
@Id
private ObjectId id;
private Float total;
}
@Document
public class Person {
@Id
private ObjectId id;
@Indexed
private Integer ssn;
@DBRef
private List<Account> accounts;
}

我希望现在一切都清楚了。

还有 spring-mongodb documentation 4.6节

关于mongodb - 使用 mongoTemplate 将 String 字段序列化为 objectId 字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24720325/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com