2016-06-23 8 views
0

그래서 Mongo dB에서 SQL과 같은 뷰를 만들려고합니다. 이 직접적으로 얻을 수 없다는 것을 알고 있기 때문에, 나는 집계 함수를 만들었습니다. 이 복잡한 집계 함수는 내가해야 할 작업을 수행하고 새 컬렉션에 값을로드합니다.Mongo DB에서 자동으로 컬렉션 업데이트

db.User.aggregate([ 
    {$limit:5} 
    {$lookup: { 
    from: "Interactions", 
    localField: "_id", 
    foreignField: "userId", 
    as: "InteractionsView"} 
     }, 
    {$project: { 

     "userCount": "$User.Count", 
     . 
     . 
     . 
     . //(All fields i need are added here) 

    "InteractionsView.Pages" : { 
    $filter: { 
     input: "$InteractionsView.Pages", 
     as: "num", 
     cond: { $gte: [ "$$num.Datetime", new Date("2015-06-14T20:15:31Z")] } 
    } 
    } 
}}, 
{$out:"ReportView"} 

]) 

    db.ReportView.find({}); 

이 좋은 쿼리 내가보기를 사용할 수 없기 때문에, 내가보기 역할을 할 수 있도록 자주이 컬렉션을 업데이트하려고 지금 .. 작동합니다. 10 분마다 실행하도록 구성 할 수있는 스케줄러와 같은 옵션이 있습니까? 아니면 사용할 수있는 새로운 상자 옵션이 있습니까? 아니면 내가 완전히 다 잘못하고있는거야?

답변

0

mongodb에서 작업을 예약하는 기능은 기본적으로 제공되지 않지만. job scheduling in mongodb?

을 참조하십시오. 그러나 운영 체제 수준 지원 (예 : Linux의 Cronjobs)을 사용하여 작업을 예약 할 수 있습니다.

0

IMHO 이는 문서 저장소에 관계형 사고를 프로젝트에 적용하는 것은 좋지 않은 아이디어입니다.

귀하가 제공 한 쿼리가 5 개 문서로 제한되어 있고 실행 시간이 허용 가능한 경우 redis와 같은 캐시 서버를 사용하여 TTL이 5 분인 키 - 값 형태로 결과를 저장하거나 단순히 캐시를 생성 할 것을 제안합니다 서버상의 객체.

가장 간단한 형식으로 요청 당 동일한 쿼리를 실행하고 데이터베이스 엔진에서 제공하는 캐시 메커니즘을 사용할 수 있습니다.

성능 향상 새로운 컬렉션을 만드는 것이 항상 디스크 집약적 이므로 메모리 결과를 재사용하면 더 빠르고 부드럽게 재생됩니다.

안녕하세요.

관련 문제