В настоящее время я экспериментирую с MongoDB. Используя Twitters Streaming API, я собрал кучу твитов (казалось, хороший способ научиться использовать параметры агрегации MongoDB).Агрегат в MongoDB возвращает больше полей
У меня есть следующий запрос
db.twitter.aggregate([
{ $group : { _id : '$status.user.screen_name', count: { $sum : 1 } } },
{ $sort : { count : -1, _id : 1 } },
{ $skip : 0 },
{ $limit : 5 },
]);
Как и следовало ожидать, это тот результат:
{
"result" : [
{
"_id" : "VacaturesBreda",
"count" : 5
},
{
"_id" : "breda_nws",
"count" : 3
},
{
"_id" : "BredaDichtbij",
"count" : 2
},
{
"_id" : "JobbirdUTITBaan",
"count" : 2
},
{
"_id" : "vacatures_nr1",
"count" : 2
}
],
"ok" : 1
}
Вопрос заключается в том, как я могу соответствовать на пользователе id_str
и вернуть screen_name
и, например, followers_count
пользователя. Я попытался сделать это с помощью { $project .... }
, но в итоге я получил пустой набор результатов.
Для тех, кто не знаком с пользовательским объектом в Twitters, JSON откликнется здесь на части (только что выбрал первого пользователя в db).
"user" : {
"id" : 2678963916,
"id_str" : "2678963916",
"name" : "JobbirdUT IT Banen",
"screen_name" : "JobbirdUTITBaan",
"location" : "Utrecht",
"url" : "http://www.jobbird.com",
"description" : "Blijf op de hoogte van de nieuwste IT/Automatisering vacatures in Utrecht, via http://Jobbird.com",
"protected" : false,
"verified" : false,
"followers_count" : 1,
"friends_count" : 1,
"listed_count" : 0,
"favourites_count" : 0,
"statuses_count" : 311,
"created_at" : "Fri Jul 25 07:35:48 +0000 2014",
...
},
Update: В соответствии с просьбой ясный пример о предлагаемом ответе (извините за не добавлять его).
Так что вместо группировки на screen_name
группировка на id_str
. Почему вы могли бы спросить, можно редактировать screen_name
, но вы все еще тот же пользователь в Твиттере (так что последний screen_name
должен быть возвращен:
db.twitter.aggregate([
{ $group : { _id : '$status.user.id_str', count: { $sum : 1 } } },
{ $sort : { count : -1, _id : 1 } },
{ $skip : 0 },
{ $limit : 5 },
]);
И как-то ответ, как это:
{
"result" : [
{
"_id" : "123456789",
"screen_name": "awsome_screen_name",
"followers_count": 523,
"count" : 5
},
....
],
"ok" : 1
}
Мог ли добавить более четкий пример того, что вы ожидаете от ответа? –
@NeilLunn Извините, я добавил это сейчас, подумал, что я был достаточно ясен, но спасибо, что указали это. –