findOne 实现在升级到 mongo-java-driver 3.3.0 时发生了变化

Nam*_*man 6 mongodb mongodb-java mongodb-3.3

我们以前使用过mongo-java-driver 3.0.4,在某个代码块中有这个实现 -

DBCollection docCollection = mongoClient.getDB(dbName).getCollection(collectionName);

Map<String, Object> docMap = doc.toMap(); // where doc is the CustomDocument

DBObject currentObj = docCollection.findOne(new QueryBuilder().put("id").is(doc.getId()).get());
if(currentObj == null) {
   docCollection.insert(new BasicDBObject(docMap));
} else {
   docCollection.update(currentObj, new BasicDBObject(docMap));
}
Run Code Online (Sandbox Code Playgroud)

我现在想要实现的是使用mongo-java-driver 3.3.0和更新代码以摆脱不推荐使用的类和方法。我尝试过的与上述代码相对应的是 -

MongoCollection<CustomDocument> docCollections = mongoClient.getDatabase(dbName).getCollection(collectionName, CustomDocument.class);

Bson filter = Filters.eq("id", doc.getId()); // where doc is the CustomDocument
FindIterable<Document> documentList = docCollections.find(filter);
if (documentList == null) {
    docCollections.insertOne(doc);
} else {
    docCollections.findOneAndUpdate(filter, new BasicDBObject(docMap));
}
Run Code Online (Sandbox Code Playgroud)

我仍然觉得缺少的是findOne在我的代码的收集和基于检查行动,对将要执行的实施insertupdate相应。

欢迎对此提出任何解决方案/建议。

Nam*_*man 3

我找到了一个解决方案,可以在mongo-java-driver 3.3.0.

现在,一种简单的执行方法findOne如下 -

MongoCollection<CustomDocument> docCollections = mongoClient.getDatabase(dbName).getCollection(collectionName, CustomDocument.class);
CustomDocument firstDocument = docCollections.find(filter).first(); //first for findOne
Run Code Online (Sandbox Code Playgroud)