Сбой запроса по идентификатору в MongoTemplate из-за преобразования в $ oid - PullRequest
0 голосов
/ 16 января 2020

У меня есть простая операция по удалению документа из MongoDB с использованием MongoTemplate. Причина использования MongoTemplate заключается в том, что проект не связан напрямую со службой, использующей базу данных, следовательно, он не требует и не должен требовать самих классов модели базы данных.

Запрос выглядит следующим образом:

Criteria criteria = Criteria.where("_id")
        .is(new ObjectId(id));
      mongoTemplate.remove(Query.query(criteria), collectionName);

Где id - это объект String, а collectionName - имя коллекции.

Однако запрос при преобразовании в синтаксис MongoDB из Spring Data MongoDB создает такое выражение: { "_id" : { "$oid" : "5e206994943f3c1d6c778efb"}} вместо { "_id" : ObjectId("5e206994943f3c1d6c778efb")}.

В результате данные сохраняются в базе данных, даже если они должны быть удалены. Когда я пытаюсь выполнить первый запрос на самой оболочке Mon go, он выдает ошибку Unknown operator: $oid.

Что-то не так, что я сделал? Как их исправить?

Спасибо.

Ответы [ 2 ]

0 голосов
/ 23 января 2020

Из Spring Data mongodb 2.2.X Оператор @Id изменен с оператором @MongoId.

Я использовал вот так и решил.

Данные сбора Mongodb:

_id: ObjectId('5e1f1bf501eb6332ebf8664c')

Решение для данных Spring:

@MongoId(targetType = FieldType.OBJECT_ID)
private String id;
0 голосов
/ 21 января 2020

Я наконец смог исправить это, используя вместо этого MongoDatabase. Используя метод deleteOne, я смог удалить _id, создав new ObjectId(id), обернутый в BasicDBObject.

...