我正在尝试将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的正确升级程序是什么?
答案 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());
答案 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相关的内容。