2012-01-07 3 views
0

MongoDB에서 나는 각 문서가 대략 다음과 같이 구성되어있는 'clients'라는 문서 모음을 가지고 있습니다. 내가 "지난 24 시간 동안 타임 스탬프와 적어도 하나 개의 세션이있는 모든 클라이언트"쿼리 수 있도록하고 싶습니다배열의 필드로 문서 쿼리

{ 
    "Sessions": [ 
    { 
     "SessionId": "pojiu5iprr2xw5ucsudyrkpv", 
     "LocationId": { 
     "$oid": "4de4590bfcee1a1b44165e2b" 
     }, 
     "Timestamp": "Wed, 01 Jun 2011 09:39:26 GMT -04:00" 
    } 
    ], 
    "_id": { 
    "$oid": "4de6410efcee1a1204a3326c" 
    } 
} 

: 타임 스탬프는 날짜 시간이라고합니다. 전체 M/R 스캔에 의존하지 않고 이것이 가능합니까? 또한 정적으로 정의 된 날짜 (예 : "2012 년 1 월 5 일 이후의 타임 스탬프가있는 세션이 하나 이상있는 모든 클라이언트"

답변

1

"최신 세션 시간"에 대해 주 문서에 필드를 추가하는 방법은 어떻습니까?

업데이트 : 한 줄에

db.clients.find(
    { "Sessions" : 
     { $elemMatch : 
     { Timestamp : { $gt : new Date(new Date() - 86400000) } } 
     } 
    } 
); 

같은 코드 :, 여기에 새 필드/인덱스를 추가하지 않고 그것을 할 수있는 방법 괜찮아요 수는

db.clients.find({ "Sessions" : { $elemMatch : { Timestamp : { $gt : new Date(new Date() - 86400000) } } } }); 

86400000입니다 하루의 밀리 초.

+0

그건 내 백업 계획입니다. 데이터를 복제 할 필요가 없습니다. –

+0

인덱싱 방법으로 생각하십시오. 모든 인덱스가 실제로는 - 데이터 중복입니다. –

+0

물론입니다. 내가 할 수만 있다면 색인 작성 사업에서 벗어나고 싶다. –

관련 문제