2013-01-16 3 views
3

배열 내에 적어도 하나의 값을 포함하는 문서를 가져와야합니다. 내 문서의 구조는 다음과 같습니다MongoDB - 정수 배열을 통해 문서 검색

{ "_id": 3, 
"username": "111111", 
"name": "XPTO 1", 
"codes": [ 2, 4, 5 ], 
"available": true } 


{ "_id": 4, 
"username": "22222", 
"name": "XPTO 2", 
"codes": [ 3, 5 ], 
"available": true } 

나는 "코드"에 의해 발견을 할 필요가 나는 값 "5"를 검색하면, 나는 그들의 배열 내부에이 값을 포함 된 모든 문서를 검색 할 필요가있다.

나는 ... #elemMatch하지만 성공을 사용하려고했습니다

db.user.find({codes: {"$elemMatch": {codes: [2,8]}}}, {"codes":1}) 

내가 어떻게 할 수 있습니까?

미리 감사드립니다.

+0

'db.user.find ({code : {$ in : [2,8]}})'에 대해'$ in'연산자를 사용할 수 있습니다. 값은 2 또는 8 또는 두 값을 갖는 문서에 대해서만 하나의 문서에 존재합니다. – Sammaye

답변

8

일부 필드의 값을 비교하는 것처럼 배열 내부의 값을 확인할 수 있습니다. 그래서, 당신은 $ elemMatch를 사용하지 않고, 같은 그것을 할 필요가있다 : -

  1. 당신이 5 배열 단일 값을 포함하고 있는지 여부를 확인하려면 : -

    db.user.find({codes: 5}, {codes:1}) 
    

    이 돌아갑니다 모든 문서, codes 배열에 5이 들어 있습니다.

  2. 당신은 배열은 값의 주어진 세트의 제한 값이 포함되어 있는지 여부를 확인하려면 : -

    db.user.find({codes: {$in: [2, 8]}}, {codes:1}) 
    

    이 2

  3. 8 중 하나가 당신이 원하는 경우에 포함하는 배열 문서를 반환됩니다 -

    db.user.find({codes: {$all: [2, 5]}}, {codes:1}) 
    

    이렇게하면 2와 5를 모두 포함하는 배열로 모든 문서가 반환됩니다.

+0

문서의 관련 부분은 다음 위치에 있습니다 (http://docs.mongodb.org/manual/reference/operators/#comparison). "Note"상자에 "하나의 항목 만 일치하는 경우 배열을 포함하는 입력란이 조건부 연산자와 일치합니다."라는 메시지가 표시됩니다. 그것이 문제의 핵심입니다. – mayhewr

+0

@mayhewr .. 여기에 관련이 있는지 여부는 확실하지 않습니다. 내 생각에, 여기서 관심은 정확한 일치에 관한 것입니다. 그러나 범위가 중요하다면 그 부분을 기억하는 것이 중요합니다. :) –

+0

당신은 절대적으로 맞습니다. 나는 그것을 너무 빨리 읽었다. 그 비트는 내가 생각하는 요점을 단지 가정합니다. 이 문서는 mongo 쿼리에서'equals'가'contains'와 같은 것을 이해하고 있다고 가정하는 것으로 보입니다. 이것은 새로운 사용자에게는 전혀 이상하다고 생각하지 않습니다. 연결된 페이지의 첫 번째 메모의 마지막 줄에 "이 쿼리는 ** a ** 필드가 ** 42 ** ** 값을 포함하는 문서 또는 ** 42 **가 포함 된 배열을 선택합니다."라고 읽어야합니다. 지금 당장 멈출거야. – mayhewr