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 쿼리와 같은 일을한다.
저는 정말 초보적인 것을 놓친 것 같지만, 여러분이 조언을 해줄 수 있다면 정말 고맙겠습니다.
에 대한
덕분에 난 그냥 (PHP는 배열의 변환을한다고 가정에 대한 책임)에 .. 숫자 인덱스 오브젝트의, 연락처가 배열이 아닌 것을 깨달았? 왜 그걸 돌려주는거야? – Micah
'contacts'가 배열 대신에 숫자 키가있는 객체라는 사실은 여기서 분명히 문제입니다. 이 쿼리는 아무 것도 반환하지 않아야합니다. – JohnnyHK
정정 - Rock Mongo가 이것을 잘못 해석하고 있습니다. 콘솔에서 데이터를 살펴 봤는데 배열입니다. 위의 코드를 수정했습니다. – Micah