默认的MappingMongoConverter 为数据库中的每个对象添加一个自定义类型键(“_class”)。所以,如果我创建一个人:
package my.dto;
public class Person {
String name;
public Person(String name) {
this.name = name;
}
}
并将其保存到数据库:
MongoOperations ops = new MongoTemplate(new Mongo(), "users");
ops.insert(new Person("Joe"));
mongo 中的结果对象将是:
{ "_id" : ObjectId("4e2ca049744e664eba9d1e11"), "_class" : "my.dto.Person", "name" : "Joe" }
问题:
将 Person 类移到不同的命名空间有什么影响?
是否可以不污染“_class”键的对象;没有为 Person 类编写唯一的转换器?
最佳答案
所以故事是这样的:我们默认添加类型作为某种提示,以实际实例化哪个类。由于您必须通过管道输入类型以通过 MongoTemplate
将文档读入其中,因此有两种可能的选择:
Contact
和你的 Person
。然后,您可以查询 Contact
,我们基本上必须确定要实例化的类型。您可能有兴趣观看 this ticket它涵盖了某种可插入的类型映射策略,以将类型信息转换为实际类型。这可以简单地用于节省空间的目的,因为您可能希望将长限定类名减少为几个字母的散列。它还允许更复杂的迁移场景,您可能会找到由另一个数据存储客户端生成的完全任意类型键并将它们绑定(bind)到 Java 类型。
关于mongodb - Spring数据MongoDb : MappingMongoConverter remove _class,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6810488/