2013-03-06 2 views
1

Я ищу, чтобы найти все дубликаты в моей коллекции, пометив дубликаты на основе даты. Следующей была моя попытка, но я не уверен, как использовать cmdResult в обновлении. Любые подсказки?Фильтр дубликатов в MongoDB C++

//filter duplicates 
bson::bo cmdResult; 
bool ok = c.runCommand(dbcol, BSON("distinct" << "date"), cmdResult); 
c.update(dbcol,Query("date"<<cmdResult<<NOT<<"_id"), BSON("$set"<<BSON("noise"<<"true")), false, true); 

ответ

0

Команда «Различная» вернет вам список всех уникальных значений «даты», имеющихся в коллекции. Но вам нужен список значений «даты», которые встречаются более одного раза.

Вы можете получить этот список, используя агрегированный команду, путем группировки по «дате» и подсчета записей, то соответствующие для подсчета> 1:

aggregate([ 
    { $group: { "_id": "$name", count: {$sum:1} } }, 
    { $match: { $gt: [ count, 1 ] } } 
]) 

Вы бы затем обновить свою коллекцию (несколько: правда) , запрашивая «дата» в этом списке, установив поле «шума»:

update({"name": {$in: [<list>]} },{$set: {"noise": true} }, true, false) 

для получения справки по агрегации см http://docs.mongodb.org/manual/reference/aggregation/

Смежные вопросы