2012-10-18 3 views
1

문서의 연락처 배열에서 특정 _id가 포함 된 문서를 찾고 있습니다. 그래서 여기 구조는 다음과 같습니다 배열에 객체를 반환하는 이유는 무엇입니까?

{ 
"_id": ObjectId("505c2daea9d397f2260001cd"), 
"contacts": [ 
    { 
     "userGroupId": ObjectId("50422b53743d6c7c0e000000"), 
     "userId": ObjectId("5061f8c66096eee07d000008") 
    }, 
    { 
     "userGroupId": ObjectId("505bf9476096ee990200000e"), 
     "userId": ObjectId("505c2daea9d397f2260001ce") 
    }, 
     { 
     "userGroupId": ObjectId("50422b75743d6c700e000004"), 
     "userId": ObjectId("506cff736096ee1e26000384") 
    }, 
    { 
     "userGroupId": ObjectId("50422b66743d6c6b0e000000"), 
     "userId": ObjectId("505c2daea9d397f2260001cf") 
    }, 
    { 
     "userGroupId": ObjectId("5050e86aa9d3977b67000000"), 
     "userId": ObjectId("506494ef6096ee021f000064") 
    }, 
    { 
     "userGroupId": ObjectId("50422b53743d6c7c0e000000"), 
     "userId": ObjectId("504d72246096ee2348000008") 
    }, 
    { 
     "userId": ObjectId("50735e8e6096ee7c510002b9"), 
     "userGroupId": ObjectId("5046c73e6096ee1b77000001") 
    } 
    ] 
} 

는 여기에 두 번째 문서입니다 : 당신은 두 문서 그들에 ObjectId가의 사용자 ID ("50735e8e6096ee7c510002b9")를 가지고 있음을 알 수 있습니다

{ 
"_id": ObjectId("505c2da0a9d397f2260000b7"), 
"contacts": [ 
     { 
     "userGroupId": ObjectId("50422b66743d6c6b0e000000"), 
     "userId": ObjectId("505c2da0a9d397f2260000b8") 
    }, 
    { 
     "userId": ObjectId("5061f8c66096eee07d000008"), 
     "userGroupId": ObjectId("50422b53743d6c7c0e000000") 
    }, 
    { 
     "userId": ObjectId("50735e8e6096ee7c510002b9"), 
     "userGroupId": ObjectId("5046c73e6096ee1b77000001") 
    } 
    ] 
} 

.

db.collection.find({ 'contacts': 
    {$elemMatch: { userId: ObjectId("50735e8e6096ee7c510002b9") } } 
}); 

(내가 생각하는) 두 문서를 반환해야합니다 :이 명령을 실행합니다. 그러나 두 번째 문서 만 반환합니다. 첫 번째가 아닙니다. 나는 또한 시도했다 :

db.collection.find({'contacts.userId': ObjectId("50735e8e6096ee7c510002b9") }); 

$ elemMatch 쿼리와 같은 일을한다.

저는 정말 초보적인 것을 놓친 것 같지만, 여러분이 조언을 해줄 수 있다면 정말 고맙겠습니다.

+0

에 대한

덕분에 난 그냥 (PHP는 배열의 변환을한다고 가정에 대한 책임)에 .. 숫자 인덱스 오브젝트의, 연락처가 배열이 아닌 것을 깨달았? 왜 그걸 돌려주는거야? – Micah

+2

'contacts'가 배열 대신에 숫자 키가있는 객체라는 사실은 여기서 분명히 문제입니다. 이 쿼리는 아무 것도 반환하지 않아야합니다. – JohnnyHK

+1

정정 - Rock Mongo가 이것을 잘못 해석하고 있습니다. 콘솔에서 데이터를 살펴 봤는데 배열입니다. 위의 코드를 수정했습니다. – Micah

답변

0

이것은 Mongo가 아니라 응용 프로그램 계층에서 문제가되었습니다. 레코드 중 하나는 숫자 키를 사용했고 다른 하나는 사용하지 않았습니다. 나는 모든 배열을 키는 것처럼 보이는 Rock Mongo로 작업했습니다. 이 문제가 될 것이다 - 당신의 도움이 JohnnyHK

관련 문제