【发布时间】:2020-01-16 13:56:18
【问题描述】:
我有一个使用 MongoTemplate 从 MongoDB 中删除文档的简单操作。使用 MongoTemplate 的原因是因为项目与使用数据库的服务没有直接关联,因此它不需要也不应该需要数据库模型类本身。
查询如下:
Criteria criteria = Criteria.where("_id")
.is(new ObjectId(id));
mongoTemplate.remove(Query.query(criteria), collectionName);
其中id 是String 对象,collectionName 是集合的名称。
但是,当 Spring Data MongoDB 将查询转换为 MongoDB 语法时,会产生这样的表达式:
{ "_id" : { "$oid" : "5e206994943f3c1d6c778efb"}} 而不是 { "_id" : ObjectId("5e206994943f3c1d6c778efb")}。
因此,即使应该将其删除,数据也会保留在数据库中。当我在 Mongo shell 本身上尝试前一个查询时,它会抛出 Unknown operator: $oid 的错误。
我做错了什么吗?如何解决?
谢谢。
【问题讨论】:
-
上面清楚地写着 Unknown operator: $oid.
-
但是转换本身是自动完成的,我不知道如何传递正确的查询而不是使用 $oid 的查询。你在@ArpitJain 之前遇到过这种问题吗?
-
id变量和_id字段中的值是什么? -
SpringData MongoDB的日志输出不是Mongo Shell格式,不能直接使用。
$oid是由使用的extended json 格式产生的有效表示。
标签: mongodb spring-data-mongodb