2014-04-23 1 views
-1

만료 필드가 미래에있는 경우에만 하위 문서 만 반환하고 싶습니다. 내 문제는 어쨌든 루트 문서를 얻고 싶습니다.

내가 현재 사용하고 있습니다 : sub.expire에 해당하는 경우

sub.expire: {"$gte": now} 

는 단지 루트 문서를 반환합니다.

하위가 반환되는지 여부에 관계없이 어떻게 루트 문서를 반환합니까?

고마워요.

+0

모든 샘플 데이터가? – yaoxing

답변

1

이것은 MongoDB가 어떻게 설계되었는지는 아닙니다. 당신은 부모 문서를 무조건 돌려 보내는 동안 여러 개의 하위 문서를 쿼리하고 조건 적으로 쿼리를 시도하는 것처럼 말하고 있습니다. 하지만 MongoDB에 관한 한, 하위 문서의 모음은 없으며, 각각의 하위 문서는 필드가있는 문서 모음이 있습니다. 하위 문서 중 일부는 하위 문서 일 수 있습니다. 당신이 하위 문서에이 조건을 "사용"하고 말할 때 - 아마 찾기 위해() - 당신이 정말로에 대한 수집을 요구하고 어떤 것은 하위 문서에서이 조건을 만족하는 문서입니다. 따라서 이 해당 조건을 만족하지 않는 문서는이 반환되지 않습니다.

MongoDB의 관점에서 볼 때 실제로 원하는 것은 컬렉션에있는 모든 문서를 반환하지만 "제출"아래에있는 특정 필드 (하위 문서)가 제거되면 만료됩니다. . 이 투영하여 MongoDB에서 일어나는 두 가지 방법이 있고, 난 두려워하지 둘 다 당신이 원하는 것을 정확히 :

  1. 찾기()이 필드가 돌아 투사 할 수 있습니다,하지만이 제한 것 : 1 (DO), 0 (do not) 또는 필드가 subdocument가 아닌 배열 인 경우 몇 가지 특수 연산자를 사용합니다.

  2. 집계는 결과를 변환하는 데 $ 프로젝트 연산자를 제공하지만이 필드 (하위 문서)가 완전히 사라지는 것을 허용하지 않습니다. 이전에 만료 날짜가있는 경우이를 null 또는 (아마도 더 나은) 비어있는 문서를 얻을 수는 있지만 그 정도면 충분합니다.

관련 문제