Несоответствие типов: невозможно преобразовать из MongoCollection <Document>в DBCollection - PullRequest
0 голосов
/ 06 июля 2018

Я пытаюсь обновить spring-data-mongodb с 1.5 до 2.1.0.M3 поэтому я изменил зависимость пом от:

    <dependency>
        <groupId>org.springframework.data</groupId>
        <artifactId>spring-data-mongodb</artifactId>
        <version>1.5.0.RELEASE</version>
    </dependency>

до 2.1.0.M3

Вот пример метода, который работал нормально с 1,5

@Override
public List<DBObject> getNews() {
    DBCollection collection = mongoTemplate.getCollection(DbCollections.news);
    DBObject query= getIsDeletedCondition(new BasicDBObject(),
                                                DbColsNews.isDeleted,Boolean.FALSE);        
    DBCursor myCursor = collection.find(query).sort(new BasicDBObject(DbColsNews.dateAdded,1));
    return myCursor.toArray();
}

Я получаю ошибку:

Type mismatch: cannot convert from MongoCollection<Document> to DBCollection

Когда я изменяю строку:

 DBCollection collection = mongoTemplate.getCollection(DbCollections.news);

до

 MongoCollection<Document> collection = mongoTemplate.getCollection(DbCollections.news);

Я получаю ошибку

  The method find(Class<TResult>) in the type MongoCollection<Document> is not applicable for the arguments (DBObject)

в этой строке:

DBCursor myCursor = collection.find(query).sort(new BasicDBObject(DbColsNews.dateAdded,1));

Какова правильная процедура обновления для mongo-java-driver / spring-data-mongodb?

Ответы [ 3 ]

0 голосов
/ 11 января 2019

У меня была похожая проблема при обновлении до spring-boot 2.0.4, и для решения этой проблемы не так много информации.

Тем не менее, простое приведение к DBCollection сработало для моего приложения. Вот фрагмент кода:

DBCollection dbCollection = (DBCollection) mongoTemplate.getCollection("collectionName");
0 голосов
/ 11 января 2019

У меня возникла эта проблема при обновлении версии Spring Boot до версии 2.X, которая также обновляет версию драйвера Mongo. Поэтому, когда мы переходим с DBCollection на MongoCOllection, в API возникает много различий. Например, вместо использования findOne (запрос) мне пришлось использовать find (запрос) .first (). Метод find () в MongoCollection возвращает FindIterable, в то время как DBCollection повторно выполняет DBcursor. Поэтому, когда я обновляю версию драйвера Mongo Java Driver, у меня не было выбора, кроме как изменить мой Mongo Stuff в соответствии с новыми методами MongoCollection. Также я раньше использовал BasicDBObject, теперь я избавился от него и вместо этого использую Document, потому что при преобразовании BasicDBObject в Document возникает ошибка приведения. Я не нашел работы вокруг. Так что, вероятно, вам придется изменить материал, связанный с Монго.

0 голосов
/ 18 июля 2018

Попробуйте создать фильтр для перехода к методу find ().

import static com.mongodb.client.model.Filters.*;

MongoCollection<Document> collection = new MongoClient().getDatabase("Database").getCollection("collection");
var myDocument = collection.find(eq("id", "Abc")).first();
System.out.println(myDocument.toJson());

Подробнее см. Здесь

...