2016-09-24 7 views
0

Я пытаюсь перегрузить метод, позволяя ему увеличивать количество нескольких документов в одном мульти-обновлении для оптимизации доступа к БД. Метод тока (одно обновление) выглядит следующим образом:Как многократно использовать 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(), но не нашли решение еще. В принципе, я хочу передать (thread-safe) deque из DBObjects в новый метод, и DB сделает большинство остальных.

PS: Удар, который я ударил, - это то, что я не могу справиться с простым поиском/запросом, но вместо этого у вас есть коллекция (лучший deque) URL-адресов для запроса.

Любые советы?

ответ

1

По общему признанию, я владею только драйвером 3.x ... Если я правильно понимаю ваш вопрос, вы хотите увеличить счет на 1 в каждом соответствующем поле «url». С 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 для количества обновленных документов.

Обратите внимание, что из-за ограничений монго, сам список обновлений может не превышать размер 16 МБ - в этом случае вам придется разделить.

+0

Thx, кажется, мне нужно обновить драйвер ... и изменить все DBObjects на Documents и ... указана моя рабочая нагрузка. : D –

+0

Спасибо, это определенно помогло. Потратил некоторое время на обновление драйвера 3.3, и у меня все еще возникают проблемы с пулом соединений, но это еще один q. –