2016-10-18 1 views
0

에서 문서 필드를 참조 나는이 구조 문서의 컬렉션이 있습니다찾기 몽고

{ 
    'travellers': [ 'a', 'b', 'c', 'd' ], 
    ... 
    'authorized-travellers': { 
    'a' => { 
     creator => 'admin', 
     authorized => true, 
     when => '2016-18-10 22:45:45', 
    }, 
    'd' => { 
     creator => 'admin', 
     authorized => false, 
     when => '2016-17-10 12:44:00', 
    }, 
    } 
} 

을 나는 여행자 승인을 보류중인 모든 문서를 찾기 위해 쿼리를해야합니다.

travellers.count가 'authorized-travellers'키보다 작 으면 여행 (문서)에 여행자 인증이 보류 중입니다.

이 예에서는이 여행에 2 개의 보류중인 승인이 있습니다 (b 및 c).

가능한 경우 (perl) 또는 수동으로 쿼리를 수행해야합니까? 어떻게?

감사합니다.

+0

좋아, 어떻게 알 수 있습니까? –

+0

@ imbabque : 당신과의 차이점을 알기 위해 열심히 기다리고 있습니다. – ssr1012

+2

@ ssr1012 _Perl_은 언어의 이름입니다. _perl_은 Perl 컴파일러 (Perl 코드를 실행하는 바이너리)의 이름입니다. _PERL_은 Perl 언어와 관련이 없습니다. [Wikipedia에서] (https://en.wikipedia.org/wiki/Perl#Name)을 읽을 수 있지만 가장 중요한 출처는 [perlfaq1]입니다 (http://perldoc.perl.org/perlfaq1.html#What's Perl은 약자가 아니기 때문에 "PERL"이라고 쓰지는 않습니다. % 22perl % 22 and % 22Perl % 22 % 3f). – simbabque

답변

1

해당 서버 측을 수행하는 간단한 방법은 없습니다. $where 함수를 생성 할 수 있습니다.

가능한 경우 문서를 보류중인 개수 (또는 부울 플래그)를 불변으로 유지하도록 스키마를 수정합니다. travellersauthorized-travellers을 업데이트 할 때 동시에 pending 개수/플래그를 원자 적 연산으로 업데이트하십시오. 그런 다음 보류중인 인증에 대한 쿼리는 간단합니다.

기존 문서를 업데이트하여 불변성을 추가하려면 자주 업데이트되는 데이터 경주에주의해야합니다.

스키마를 변경할 수없는 경우 비효율적 인 경우 클라이언트 쪽 문서를 반복하고 개별적으로 확인하는 것이 간단합니다. 문서 당 문서가 많고 많은 데이터가있는 경우 필요한 필드 만 다시 프로젝트해야합니다.

이러한 아이디어가 도움이되기를 바랍니다.