2016-07-21 6 views
0

ゲームで発生したイベントのデータベースがあります。私はレベルを開始したユニークなプレーヤーの数についての情報を取得しようとしています。mongodbで一意のユーザーを選択するにはどうすればいいですか

heh = list(db.events.aggregate(
[ 
    { "$match": {"status": 'start'}}, 
    {"$group": {"_id": "$eventName", "players": {"$sum": 1}}}, 
])) 
print(heh) 

レベルが開始された回数についての情報を取得しています。正しい情報を得るためにコードを変更するにはどうすればよいですか?ユニークユーザーにはユニークな「uid」があります。

+1

配列内のレコードをカウントし、その後$ addToSetはユニークなレコードを追加します。これを試してみて、私たちはより良いあなたを助けるために。また、コードをより良い方法でフォーマットしてください。 – sirfz

+0

"status"はmongoファイルのディレクトリです。レベルに関するイベントのみが含まれます。レベル番号は "eventName"ディレクトリに保存されています。すべてのユーザが自分の "uid"を持っているのは残念です。したがって、すべてのイベントには「eventName」と「uid」がありますが、必要なものだけが「ステータス」を持っています。この情報は十分ですか?その結果、私は[{Level 1:1111}、...]のようなものを得なければなりません。 –

答えて

0

あなたは、実際のデータとそれがための手段についての詳細情報を提供する必要が

db.events.aggregate(
[ 
    { "$match": {"status": 'start'}}, 
    {"$group": {"_id": "$eventName", "players": {"$addToSet": "$uid"}}}, 
    {"$project": {"_id": 1, "Count": {"$size": "$players"}}} 
]) 

Screen

db.test1.aggregate( 
[  
    { "$match": {"status": 'start'}},  
    {"$group": {"_id": "$eventName", "players": {"$addToSet": "$uid"}}}, 
    {$unwind:"$players"}, 
    {$group:{_id:"$_id",count:{$sum:1}}} 
] 
) 
+0

「$ size」はそのように機能しますか? "pymongo.errors.OperationFailure:exception:無効な演算子 '$ size' "というエラーが表示されます。私はここから理解しています:https://docs.mongodb.com/manual/reference/operator/query/size/それは別の方法で動作します。または、私はちょっと間違っていることを強調しないでください –

+0

ここを参照してください:https://docs.mongodb.com/manual/reference/operator/aggregation/size/ –

+0

サンプルレコードを投稿することはできますか?私はあなたのコレクションの構造を完全に理解することができます。 –

関連する問題