У меня есть две коллекции
Сообщений:
{
"_Id": "1",
"_PostTypeId": "1",
"_AcceptedAnswerId": "192",
"_CreationDate": "2012-02-08T20:02:48.790",
"_Score": "10",
...
"_OwnerUserId": "6",
...
},
...
и пользователей:
{
"_Id": "1",
"_Reputation": "101",
"_CreationDate": "2012-02-08T19:45:13.447",
"_DisplayName": "Geoff Dalgas",
...
"_AccountId": "2"
},
...
и я хочу найти пользователей, которые пишут от 5 до 15 сообщений. Вот как выглядит мой запрос:
db.posts.aggregate([
{
$lookup: {
from: "users",
localField: "_OwnerUserId",
foreignField: "_AccountId",
as: "X"
}
},
{
$group: {
_id: "$X._AccountId",
posts: { $sum: 1 }
}
},
{
$match : {posts: {$gte: 5, $lte: 15}}
},
{
$sort: {posts: -1 }
},
{
$project : {posts: 1}
}
])
и он работает ужасно медленно. Для пользователей 6k и сообщений 10k потребовалось более 40 секунд, чтобы получить ответ, в то время как в реляционной базе данных я получаю ответ в течение секунды. Где проблема? Я только начинаю с mongodb, и вполне возможно, что я испортил этот запрос.