2016-09-24 49 views
0

我試圖重載的方法,允許其增加的幾個文件的數量在一個多更新優化DB訪問。當前(單個更新)方法如下所示:如何使用deque而不是在MongoDB中查找多更新?

static synchronized void updateDb(String col, DBObject oldDoc) { 
     DBCollection collection = database.getCollection(col); 
     BasicDBObject inc = new BasicDBObject().append("$inc", new BasicDBObject().append("count", 1)); 
     collection.update(new BasicDBObject().append("url",oldDoc.get("url").toString()), inc); 
} 

現在我看着更新多和bulk.find.update(),但還沒有找到一個解決辦法。基本上我想將DBObject的(線程安全的)雙端隊列交給新的方法,並讓數據庫完成其餘的大部分工作。

PS:我打的障礙是,我不能用一個簡單的查找/查詢得到的,而是有網址的集合(最好雙端隊列)來查詢。

有什麼建議嗎?

回答

1

誠然,我只能用3.X司機精通......如果我正確理解你的問題,要通過各1個匹配的「網址」字段遞增計數。使用3.x可以這樣做:

// Input is Collection<DBObject> as variable in 

    // New way to get the collection 
    MongoClient client = new MongoClient(); 
    MongoCollection<Document> collection = client.getDatabase("mydb").getCollection("myColl"); 

    // Prepare list of update URLs 
    List<String> urls = in.stream().map(dbObject -> (String) dbObject.get("url")).collect(Collectors.toList()); 

    // Update many with $in and the same update operation 
    collection.updateMany(Filters.in("url", urls), Updates.inc("count", 1)); 

您還可以檢查updateMany返回的更新結果,以獲取更新文檔的數量。

。注意,由於蒙戈的限制,更新列表本身不得超過16MB的大小 - 你必須在這種情況下分裂。

+0

THX,看來我要更新驅動程序...並改變所有的DBObjects文件和......我的工作量指出。 :D –

+0

謝謝,這絕對有幫助。花了一些時間升級到3.3的驅動程序,我仍然有一些連接池的問題,但那是另一個問題。 –