1

日付に基づいて重複にフラグを付けることで、コレクション内のすべての重複を見つけようとしています。以下は私の試みでしたが、更新内で 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);
4

1 に答える 1

0

「distinct」コマンドは、コレクション内にあるすべての一意の「日付」値のリストを返します。しかし、必要なのは、複数回出現する「日付」値のリストです。

このリストは、aggregate コマンドを使用して取得できます。「日付」でグループ化し、エントリをカウントしてから、カウント > 1 を照合します。

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

次に、そのリストで「日付」を照会し、「ノイズ」フィールドを設定して、コレクション (multi:true) を更新します。

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

集計のヘルプについては、http://docs.mongodb.org/manual/reference/aggregation/ を参照してください

于 2013-03-26T10:55:49.363 に答える