2017-06-02 6 views
0

MongoDBで集約コマンドを調整しようとしているため、特定のフィールドの重複が無視されます。ここに例文があります:無関係なフィールドで重複を無視するようにmongo集計を調整する方法

{ 
    "_id" : ObjectId("xxx"), 
    "dev_type" : "Foo" 
    "should_be_unique" : "abcdefg" 
} 

今、私のコードは、さまざまな「dev_types」の数を検索します。私はその機能をそのまま残して、カウントを減らして、 "should_be_unique"フィールドで重複をカウントしないようにしたい。

私の既存のPythonのコードは次のようになります。

result_set = db.aggregate([ 
    {"$match": match_condition}, 
    {"$group": {"_id": {"dev_type": "$dev_type"}, 
       "total": {"$sum": 1}}}, ]) 

これは、この種の結果を返します。

{ "_id" : { "dev_type" : "Foo" }, "total" : 2 } 
{ "_id" : { "dev_type" : "Bar" }, "total" : 7 } 

私はいくつかのオプションを試してみたが、私の最高のために、私は」することができますそのようなクエリを変更する最もクリーンな方法を見つけ出し、重複を排除します。 2つの文書が同じ "should_be_unique"値を持ち、 "dev_type"が "Bar"に設定されている場合、 "Bar"の合計は7でなく6になり、複製の結果として減少するという考えがあります。

これはMongoの一般的なシナリオのようです。希望の結果が得られるようにこのクエリを調整する簡単な方法があると思います。どんな支援も大歓迎です。

答えて

1

あなたは値をカウントする$size$project続い$group段階でユニークshould_be_unique値を蓄積する$addToSetを使用することができます。

何か

よう
db.collection.aggregate([ 
    {"$group": {"_id": {"dev_type": "$dev_type"},"unique": {"$addToSet": "$should_be_unique"}}}, 
    {"$project": { "total": {"$size": "$unique"}}} 
]) 
関連する問題