类型不匹配:无法从MongoCollection <document>转换为DBCollection

时间:2018-07-05 23:29:56

标签: mongo-java-driver

我正在尝试将spring-data-mongodb从1.5升级到2.1.0.M3 所以我从:

修改了pom依赖项
    <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 :(得分:1)

尝试创建一个过滤器以传递给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());

For More Take Reference from here

答案 1 :(得分:1)

升级到spring-boot 2.0.4时,我遇到了类似的问题,有关此问题的解决方案没有太多信息。

但是,对我的应用程序进行简单的到DBCollection的转换是可行的。这是一个片段:

DBCollection dbCollection = (DBCollection) mongoTemplate.getCollection("collectionName");

答案 2 :(得分:1)

当我将Spring Boot版本升级到2.X时也遇到了这个问题,该版本也更新了Mongo Driver版本。因此,当我们从DBCollection更改为MongoCOllection时,API之间存在很多差异。例如,必须使用find(query).first()而不是使用findOne(query)。当DBCollection重新调整DBcursor时,MongoCollection中的find()方法将返回FindIterable。因此,当我升级Mongo Java驱动程序版本时,除了根据新的MongoCollection方法更改Mongo Stuff外,别无选择。另外,我以前使用过BasicDBObject,现在我摆脱了使用它,而是使用Document,因为当我尝试将BasicDBObject转换为Document时,存在转换错误。我还没有找到解决方法。因此,可能您必须更改与Mongo相关的内容。