在mongo数据库中创建的索引
实体中的字段
@Indexed(name = "2dsphere")
private Point location;
mongo数据库中的此字段
"location":
{ "type": "Point",
"coordinates":
[ 41.035137, 28.98953 ]
}
尝试从mongo数据库检索实体
repository.findById(id).orElse(null)引发以下错误
例如,获取消息():应将文档文档{{type=Point,coordinates=[41.015137,28.97953]}}读入类型类com.mongodb.client.model.geojson.Point,但未找到后者的持久性实体!
2条答案
按热度按时间qc6wkl3g1#
如果你通过Hibernate或者其他方式使用仓库,java会尝试Map文档和类类型。2不幸的是,这种方式很慢,而且不是一种优化的方式
如果你使用原生查询,mongo返回文档类型。2如果你想要列表或分页,那么数据类型是无关紧要。3因为mongo已经返回json类型。4如果你想要返回任何响应对象,那么可以使用**$project**stage。
但是如果你想获取一个实体,更新它并保存它,你需要自己的数据类型,那么你现在就可以使用MongoCursor。
什么是MongoCursor?MongoCursor就像一个集合。存储给定类型的数据。这种方式作为原生查询非常快。
示例:
MongoCursor文档:https://www.mongodb.com/docs/manual/reference/method/js-cursor/
重点!:你必须添加第一个添加字段阶段,因为你存储ObjectId类型,但你的实体有字符串id字段。不要忘记这个阶段。
83qze16e2#
只是不得不解决同样的问题。我发现MappingMongoConverter正在寻找CodecRegistryProvider为几何类型提供编解码器,但CodecRegistryProvider为空。
我不知道为什么没有设置它,但我通过创建一个等待ContextRefreshedEvent并手动设置codecRegistryProvider的组件解决了这个问题。