首页 > 解决方案 > 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.

我做错了什么吗?如何修复它们?

谢谢你。

标签: mongodbspring-data-mongodb

解决方案


从 Spring Data mongodb 2.2.X @Id 运算符更改为 @MongoId 运算符。

我这样使用并解决了。

Mongodb收集数据:

_id: ObjectId('5e1f1bf501eb6332ebf8664c')

Spring数据解决方案:

@MongoId(targetType = FieldType.OBJECT_ID)
private String id;

推荐阅读