2013-03-06 86 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

“distinct”命令将返回集合中所有唯一“日期”值的列表。但是你需要的是一个不止一次出现的“日期”值列表。

您可以通过“日期”分组和计数的条目,然后> 1匹配的计数使用aggregate命令,得到这个列表:

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/