mongodb - MongoTemplate中的id查询因转换为$oid而失败
问题描述
我有一个使用 MongoTemplate 从 MongoDB 中删除文档的简单操作。使用 MongoTemplate 的原因是因为项目与使用数据库的服务没有直接关联,因此它不需要也不应该需要数据库模型类本身。
查询如下:
Criteria criteria = Criteria.where("_id")
.is(new ObjectId(id));
mongoTemplate.remove(Query.query(criteria), collectionName);
Whereid
是一个 String 对象,并且collectionName
是集合的名称。
但是,当 Spring Data MongoDB 将查询转换为 MongoDB 语法时,会产生这样的表达式:
{ "_id" : { "$oid" : "5e206994943f3c1d6c778efb"}}
而不是{ "_id" : ObjectId("5e206994943f3c1d6c778efb")}
.
因此,即使应该将其删除,数据也会保留在数据库中。当我在 Mongo shell 本身上尝试前一个查询时,它会抛出Unknown operator: $oid
.
我做错了什么吗?如何修复它们?
谢谢你。
解决方案
从 Spring Data mongodb 2.2.X @Id 运算符更改为 @MongoId 运算符。
我这样使用并解决了。
Mongodb收集数据:
_id: ObjectId('5e1f1bf501eb6332ebf8664c')
Spring数据解决方案:
@MongoId(targetType = FieldType.OBJECT_ID)
private String id;
推荐阅读
- javascript - 如何为 HTML 中加载的 javascript 模块禁用 console.log?
- c# - 如何使用名为 tbl_admin 的表将我的注册表单 (admin) 连接到我的数据库 TACLC?
- python - Python系列if条件返回ValueError:
- excel - 仅在包含数据的最后一行将 Excel 邮件合并保存为 PDF
- mysql - 如何在多个 JOIN 上使用 GROUP_CONCAT
- python - 来自多个用户输入的字典列表并列,而为真
- mysql - 如何使用以下错误消息调试 SQL 查询
- c++ - 函数覆盖
- python - python同时解析环境变量和额外的插值
- javascript - 三角形的 WebGL 代码,但三角形不会显示