Оптимизация производительности $ group в mongodb - PullRequest
0 голосов
/ 31 октября 2018

У меня огромные документы примерно на 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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...