[MONGODB] 몽구스 제한 / 오프셋 및 계산 쿼리
MONGODB몽구스 제한 / 오프셋 및 계산 쿼리
쿼리 성능에 이상한 하나의 비트 ... 나는 문서의 총 수를 수행하는 쿼리를 실행해야하고, 또한 제한 상쇄 될 수있는 결과 집합을 반환 할 수 있습니다.
그래서, 총 57 개 문서를 가지고 있고, 사용자는 (20)에 의해 상쇄 10 문서를 원한다.
내가 먼저 array.slice 그들이 원하는 문서를 반환하여, (배열로 반환) 모든 57 개 문서에 대한 쿼리입니다, 이렇게 2 가지 방법으로 생각할 수 있습니다. 두 번째 옵션은 몽고의 기본 '계산'방법을 사용하여 첫 번째는, 다음 몽고의 기본 $ 한계를 사용하여 두 번째 쿼리를 실행하고 그리 게이터를 건너 $, 2 개 쿼리를 실행하는 것입니다.
당신은 더 나은 확장 할 어떤 생각하십니까? 모두 하나 개의 쿼리에서 그 일을, 또는 두 개의 분리 된 것들을 실행?
편집하다:
// 1 query
var limit = 10;
var offset = 20;
Animals.find({}, function (err, animals) {
if (err) {
return next(err);
}
res.send({count: animals.length, animals: animals.slice(offset, limit + offset)});
});
// 2 queries
Animals.find({}, {limit:10, skip:20} function (err, animals) {
if (err) {
return next(err);
}
Animals.count({}, function (err, count) {
if (err) {
return next(err);
}
res.send({count: count, animals: animals});
});
});
해결법
-
==============================
1.나는 당신이이 쿼리를 사용하는 것이 좋습니다 :
나는 당신이이 쿼리를 사용하는 것이 좋습니다 :
난 당신이 모든 항목을 조회하고 수행하는 것보다 것은 당신이 빅 데이터가있을 때 원인은 나중에 데이터가 전송 및 처리에 문제가있는 것, 건너 뛰고하지해야한다고 생각합니다.
-
==============================
2.대신이 쿼리를 사용하는 단일 쿼리에서 집계를 사용
대신이 쿼리를 사용하는 단일 쿼리에서 집계를 사용
집계 "$면이"더 빨리 가져올 수 있으며, 총 개수와 스킵 및 한계와 데이터
db.collection.aggregate([ //{$sort: {...}} //{$match:{...}} {$facet:{ "stage1" : [ $group:{_id:null, count:{$sum:1}} ], "stage2" : [ { "$skip": 0}, {"$limit": 2} ] }}, {$unwind: "$stage1"}, //output projection {$project:{ count: "$stage1.count", data: "$stage2" }} ]);
출력은 다음과 같다 : -
[{ count: 50, data: [ {...}, {...} ] }]
-
==============================
3.이 문제를 스스로 해결하는 데 후, 나는 user854301의 대답에 구축하고 싶습니다.
이 문제를 스스로 해결하는 데 후, 나는 user854301의 대답에 구축하고 싶습니다.
몽구스 ^ 4.13.8 내가 toConstructor라는 기능을 사용할 수 있었다 () 필터가 적용되는 날 때 쿼리를 여러 번 구축을 방지 할 수있다. 나는이 기능이 너무 이전 버전에서 사용할 수 있습니다 알고 있지만이를 확인하기 위해 몽구스 문서를 확인해야합니다.
다음은 블루 버드 약속을 사용합니다 :
let schema = Query.find({ name: 'bloggs', age: { $gt: 30 } }); // save the query as a 'template' let query = schema.toConstructor(); return Promise.join( schema.count().exec(), query().limit(limit).skip(skip).exec(), function (total, data) { return { data: data, total: total } } );
이제 카운트 쿼리는 일치하는 전체 레코드를 반환하고 반환 된 데이터는 전체 기록의 일부가 될 것입니다.
쿼리를 구성한 () 주위 쿼리 ()을 유의하시기 바랍니다.
-
==============================
4.당신이 모든 것을 할 것입니다 도서관이있다, 몽구스 - PAGINATE-V2 체크 아웃
당신이 모든 것을 할 것입니다 도서관이있다, 몽구스 - PAGINATE-V2 체크 아웃
from https://stackoverflow.com/questions/13935733/mongoose-limit-offset-and-count-query by cc-by-sa and MIT license
'MONGODB' 카테고리의 다른 글
[MONGODB] MongoDB의에서 컬렉션을 복제 (0) | 2019.12.21 |
---|---|
[MONGODB] MongoDB를 작동하지 않습니다. "ERROR : DBPATH (/ 데이터 / DB)가 존재하지 않습니다." (0) | 2019.12.21 |
[MONGODB] 어떻게 몽구스과 ObjectId가를 생성 할 수 있습니까? (0) | 2019.12.21 |
[MONGODB] 몽구스 '정적'방법 대 '예'방법 (0) | 2019.12.21 |
[MONGODB] Node.js를 _id 노드 MongoDB를 네이티브로 문서를 선택하여 MongoDB (0) | 2019.12.21 |