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

时间:2016-10-15 14:57:15

标签: 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));
}

我现在想要实现的是使用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));
}

我仍然发现缺少的是我的代码中的集合中的findOne实现以及相应地针对insertupdate执行的基于检查的操作。

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

2 个答案:

答案 0 :(得分:0)

我找到了解决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

答案 1 :(得分:-1)

nodeJS中也弃用

findOne()

find().limit(1) 是替代方案。

http://mongodb.github.io/node-mongodb-native/2.0/api/Collection.html#findOne