안에 727000 개의 문서가있는 'matches'컬렉션이 있습니다. 내부에는 6 개의 필드가 있으며, 배열에는 단순한 정수와 객체 ID가 없습니다. 다음과 같이 컬렉션에 대한 쿼리를 수행하고 있습니다.Mongodb toArray() performance
matches.find({
$or: [{
homeTeamId: getObjectId(teamId)
}, {
awayTeamId: getObjectId(teamId)
}
],
season: season,
seasonDate: {
'$gt': dayMin,
'$lt': dayMax
}
}).sort({
seasonDate: 1
}).toArray(function (e, res) {
callback(res);
});
결과가 약 7-8 개의 문서 만 반환됩니다. 쿼리는 ~ 100ms 정도 걸리는데, 상당히 합리적이라고 생각합니다.하지만 주요 문제는 메서드 toArray()를 호출하면 ~ 600ms 정도가됩니다 !! 내 노트북, Intel Core I5, 6GB RAM에서 서버를 실행하고 있지만 7-8 문서에 대해 600ms를 추가 할 수 없습니다. mongodb-native 드라이버를 사용해 보았습니다. 이제는 mongoskin으로 바뀌었고, 같은 느린 결과를 얻었습니다. 제안 사항이 있으십니까?
'콜백()'은 무엇입니까? – bdesham
함수에서 데이터를 반환합니다. exports.getPrevNextMatches = function (teamId, callback) {} 내에서이 쿼리를 래핑했습니다. 그러나 toArray() 메서드를 사용하지 않고 동일한 결과를 얻으려면 ~ 100ms를 사용합니다. toArray() 메소드가 ~ 600ms를 더함 – Dove
'forEach'를'toArray' 대신'find' 결과에 시도 했습니까? 나는 그것이 도움이 될지는 모르지만, 시도하는 것은 쉬운 일이다. 또한,'explain'이 그 쿼리를 알려줍니다. – WiredPrairie