Я следующие документы в коллекции MongoDB в:MongoDB: Число различных элементов массива
{
"userid" : 1,
"open" : [
{
"messageid" : 1441,
"viewed" : ISODate("2015-03-24T00:50:00Z"),
},
{
"messageid" : 1441,
"viewed" : ISODate("2015-06-21T00:10:00Z"),
},
{
"messageid" : 1527,
"viewed" : ISODate("2015-06-21T07:52:00Z"),
}
]
}
{
"userid" : 2,
"open" : [
{
"messageid" : 2155,
"viewed" : ISODate("2015-09-15T15:32:00Z"),
},
{
"messageid" : 2208,
"viewed" : ISODate("2015-10-02T12:20:00Z"),
},
{
"messageid" : 2263,
"viewed" : ISODate("2015-01-15T07:50:00Z"),
}
]
}
Я хочу пользователей, просмотревших 3 или более различных сообщений в определенный период времени.
Пример запроса:
Дайте пользователям те, кто рассматривают 3 или более различных сообщений между 2015-01-01 до 2015-11-30
Ожидаемый результат: {userid: 2}
Примечание: (userid: 1)
также просмотрел 3 сообщения в определенном диапазоне дат, но они не являются отдельными сообщениями.
Пожалуйста, помогите мне построить запрос выбора MongoDB.
Я попытался с помощью следующей агрегации запроса, но это заняло так много времени, как у меня есть около 5 миллионов записей в моей коллекции. db.userDetails.aggregate ({$ match: {userid: {$ in: [225144,3]}}}, {$ unwind: "$ open"}, {$ match: {"open.viewed": {$ gte: 15010100, $ lte: 15063048}}}, {$ group: {_id: "$ userid", открыть: {$ addToSet: "$ open"}}}, {$ out: "segment"}) –