2014-10-02 2 views
1

나는 MongoDB의 컬렉션에서 문서의 두 가지 유형이 있습니다문서에 단일 값의 배열을 구별

{ "세션": 키 세션이 간단한 값을 가지고

  • 하나 NumberLong으로을 (" 10000000000001 ")}

  • 키 세션에는 값 배열이 있습니다.

    { "세션"[NumberLong으로 ("10000000000001")]}

즉 두 번째 범주에서 모든 문서를 검색 할 수있는 방법이 있습니까. 가치가 단순하고 단순한 가치가없는 문서 만 제공합니까?

답변

1

당신은 그것을 위해 쿼리의이 종류를 사용할 수 있습니다

db.collectionName.find({ $where : "Array.isArray(this.sessions)" }); 

하지만 당신은 더 나은 일관된 일을 유지하기 위해 한 가지 유형의 모든 레코드를 변환하는 것입니다.

+0

@AlexeiKosov 나는 일이 일관되어야한다는 데 동의합니다. 이 상태는 버그의 결과입니다. –

1

이 코드는 다음과 같이 간단 할 수있다 :

db.c.find({sessions:{$gte:[]}}); 

설명 :

  • 만 그 세션 데이터 타입이 배열 문서를 검색 할 때문에, 그리고 기능에 의해 $ gte (데이터 형식이 tow 피연산자간에 다른 경우 false를 반환하고 Double, Integer32, Integer64는 같은 데이터 형식으로 간주됩니다.) 반대쪽 피연산자로 빈 배열을 사용하면 모든 결과를 검색하는 데 도움이됩니다.
  • 또한 표준 쿼리의 경우 $gt, $lt, $lte (주의 : 집계 파이프 라인의 표현식에서 동일한 이름을 가진 운영자와 다른 동작)은 동일한 기능을합니다. 나는 MongoDB V2.4.8, V2.6.4에서 이것을 증명했다.
+1

이것이 왜 문제의 해결책인지 설명하는 몇 가지 세부 사항을 추가해야합니다. – Exa

+0

@Exa, 당신 말이 맞아요. 결과에 설명을 추가했습니다. – Wizard

관련 문제