sql >> データベース >  >> NoSQL >> MongoDB

pymongo:重複を削除します(mapreduce?)

    別のアプローチは、 集約フレームワーク> これはmap-reduceよりも優れたパフォーマンスを発揮します。次の集約パイプラインについて考えてみます。これは、集約パイプラインの最初のステージとして、 $ group オペレーターはドキュメントをIDでグループ化します フィールドとunique_idsに格納します 各_idのフィールド $ addToSet オペレーター。 $ sum > アキュムレータ演算子は、渡されたフィールドの値(この場合は定数1)を合計します。これにより、グループ化されたレコードの数がカウントフィールドにカウントされます。もう1つのパイプラインステップ $ match 少なくとも2のカウント、つまり重複するドキュメントをフィルタリングします。

    集計から結果を取得したら、カーソルを繰り返して最初の _idを削除します unique_ids内 フィールドに入力し、残りを配列にプッシュします。この配列は、後で重複を削除するために使用されます(マイナス1エントリ):

    cursor = db.coll.aggregate(
        [
            {"$group": {"_id": "$ID", "unique_ids": {"$addToSet": "$_id"}, "count": {"$sum": 1}}},
            {"$match": {"count": { "$gte": 2 }}}
        ]
    )
    
    response = []
    for doc in cursor:
        del doc["unique_ids"][0]
        for id in doc["unique_ids"]:
            response.append(id)
    
    coll.remove({"_id": {"$in": response}})
    


    1. RedisserviceStackプール接続クライアント

    2. Mongodbで最後のX分のデータを取得するためのクエリ

    3. PyMongoとFlaskのJsonifyにはエスケープスラッシュが含まれています

    4. MongoDBで内部結合を行う方法は?