mongoose에서의 몽고db의 집계함수 실행은 mongodb에서의 쿼리와 형태가 거의 같다.
또한 java와 python과의 속도 비교에서도 거의 비슷하다.
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
// Connection URL
var url = 'mongodb://127.0.0.1:27017/admin';
mongoose.connect(url, { useNewUrlParser: true }); //옵션 파라미터는 몽고db버전에 따라 다르다
var structor = new Schema({
"date":Date,
"random_text1" : String,
"random_text2" : String
});
structor.set('collection', 'test_db'); //여기서 컬렉션 지정을 안하면 조회대상을 못 찾을 수 있다.
var target = mongoose.model("test_db", structor );
target.aggregate([
{
$group: {
_id:{
random_text1: "$random_text1", //매핑할 대상 및 결과 이름
random_text2: "$random_text2",
date:"$date"
},
count: { "$sum": 1 }
}
}
],function(rr,ra){
if(ra){
console.log(ra);
}
});
group을 통한 매핑의 예제이다. aggregate 내부의 파라미터는 배열러 받을 수 있으며 json형식으로 구성되어 있다.
count 뿐만 아니라 sum 을 통해서 대상 도큐먼트의 합계, avg를 통한 평균을 구할 수도 있다.
만약, 매핑되는 객체의 이름을 바꾸고자한다면 아래와같은 옵션을 넣어주면 된다.
{
$project:{
daying: { $dateToString: { format: "%Y-%m-%d", date: "$date" } }, //date 형식 변경
random_text1: 1, //가져올 대상을 숫자1로 카운트하게 지정
random_text2: 1,
reg_origin_date: "$date" //date이름을 reg_origin_date로 변경
}
}
조건절은 match를 통해서 실시한다.
{
$match: {
$and: [
{ reg_origin_date: { $gte: new Date('2019-06-03'), $lte: new Date('2019-07-19') } }
]
}
},
skip과 limit을 통한 페이징 처리도 가능하다.
{ $limit: 1000000 },
{ $skip: 0 },
위 내용을 전부 합친 소스이다.
var mongoose = require("mongoose");
var Schema = mongoose.Schema;
var url = 'mongodb://127.0.0.1:27017/admin';
mongoose.connect(url, { useNewUrlParser: true });
var structor = new Schema({
"date":Date,
"random_text1" : String,
"random_text2" : String
});
structor.set('collection', 'test_db');
var target = mongoose.model("test_db", structor );
target.aggregate([
{
$project:{
daying: { $dateToString: { format: "%Y-%m-%d", date: "$date" } },
random_text1: 1,
random_text2: 1,
reg_origin_date: "$date"
}
},
{
$match: {
$and: [
{ reg_origin_date: { $gte: new Date('2019-06-03'), $lte: new Date('2019-07-19') } }
]
}
},
{ $limit: 1000000 },
{ $skip: 0 },
{
$group: {
_id:{
random_text1: "$random_text1",
random_text2: "$random_text2",
daying:"$daying"
},
count: { "$sum": 1 }
}
}
],function(rr,ra){
if(ra){
console.log(ra);
}
});
반응형
'몽고DB > Nodejs 몽고DB' 카테고리의 다른 글
Node.js mongoose에서 몽고db 컬렉션이 조회되지 않을 때 (0) | 2019.07.23 |
---|---|
Node.js Http parser 그리고 몽고DB (2) | 2019.04.27 |
* 위 에니메이션은 Html의 캔버스(canvas)기반으로 동작하는 기능 입니다. Html 캔버스 튜토리얼 도 한번 살펴보세요~ :)
* 직접 만든 Html 캔버스 애니메이션 도 한번 살펴보세요~ :)
댓글