在MongoDB c++中过滤重复项

Filter duplicates in MongoDB C++

本文关键字:过滤 MongoDB c++      更新时间:2023-10-16

我希望通过标记基于日期的重复项来找到我的集合中的所有重复项。以下是我的尝试,但我不确定如何在更新中使用cmdResult。有线索吗?

//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);

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

您可以使用aggregate命令获得此列表,通过按"日期"分组并对条目进行计数,然后匹配计数> 1:

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

你将更新你的集合(multi:true)通过查询"date"在该列表中,设置"noise"字段:

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

有关聚合的帮助,请参见http://docs.mongodb.org/manual/reference/aggregation/