У меня огромные документы примерно на 2 миллиона, каждая учетная запись имеет много журналов
{
"_id" : 1,
"type" : "login",
"date" : "2057-03-28T02:59:41.176Z",
"link" : DBRef("accounts", ObjectId("5bd9683d4df859ad279b5649"))
},
{
"_id" : 2,
"type" : "login",
"date" : "2057-03-28T02:53:41.176Z",
"link" : DBRef("accounts", ObjectId("5bd9683d4df859ad279b5649"))
},
{
"_id" : 3,
"type" : "login",
"date" : "2057-03-28T02:49:41.176Z",
"link" : DBRef("accounts", ObjectId("5bd9683d4df859ad279b5643"))
}
Таким способом я пытаюсь получить последнюю дату регистрации для каждой учетной записи, но для получения результата понадобилось несколько секунд.
db.logs.aggregate(
{
$match: {
"link.$ref": "accounts",
"link.$id": { $in: [ObjectId("5bd9683d4df859ad279b5649"), ObjectId("5bd9683d4df859ad279b5643")]} //array accounts id
}
},
{
$group: {
_id: "$link",
date: {$last: "$date"},
type: {$last: "$type"}
}
}
)
Я использую mongodb 3.4