2016-07-21 3 views
0

У меня есть база данных с событиями, которые произошли в игре. Я пытаюсь получить информацию о том, сколько уникальных игроков начали уровень. Я использую этот код для этого:Как я могу выбрать уникальных пользователей в mongodb

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

Но я получаю информацию о том, сколько раз начался уровень. Как я могу изменить свой код, чтобы получить правильную информацию? У уникальных пользователей есть уникальный «uid».

+1

Вы должны предоставить более подробную информацию о фактических данных и что это означает для нам лучше помочь вам. Кроме того, пожалуйста, отформатируйте свой код в лучшую сторону. – sirfz

+0

«статус» - это каталог в файле mongo. Сюда относятся только события, касающиеся уровней. Номер уровня хранится в каталоге «eventName», и, как я понимаю, каждый пользователь имеет свой «uid». Поэтому каждое событие имеет «eventName» и «uid», но только те, кто мне нужен, имеют «статус». Достаточно ли этой информации? В результате я должен получить что-то вроде: [{Level 1: 1111}, ...]. –

ответ

0

Попробуйте это .. $ addToSet добавляет уникальные записи, а затем подсчитать записи в массиве

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: invalid operator '$ size' ". Как я понял из этого: https://docs.mongodb.com/manual/reference/operator/query/size/, он работает по-другому. Или я просто не понимаю, что не так –

+0

См. Здесь:: https: //docs.mongodb.com/manual/reference/operator/aggregation/size/ –

+0

Можете ли вы опубликовать несколько примеров записей? так что я могу полностью понять структуру вашей коллекции. –

Смежные вопросы