저는 MongoDB를 처음 접했고 새로운 프로젝트를 위해 특정 쿼리를 설정하는 데 어려움을 겪어 왔습니다.MongoDB의 배열에서 중첩 된 객체를 찾는 방법은 무엇입니까?
난이 (단순화 된 버전)과 같은 데이터 구조를 가지고
games: {_id: ..., scenes: [{_id: ..., views: [{_id: ...}]}]}
(즉 게임 장면들의 집합을 포함, 장면보기의 컬렉션을 포함).
여기에서 쿼리하려는 것은 특정 뷰 객체입니다. 대답은 $ elemMatch를 사용하는 것이지만, 어떻게 설정해야합니까? 연구의 조금 장난 + 후, 나는 장면 얻기 위해이 작업을 수행 할 수 있습니다 알고
db.collection("games").findOne({
_id: ObjectId(req.params.gid)},
{
scenes: {
$elemMatch: {_id: ObjectId(req.params.sid)}
}
}...
을하지만 그것은 단지 (_id에 의해) 내가 관심이있는 특정보기를 가져옵니다 있도록 어떻게 내가이 확장 할 ?
나는 언제나 수동으로 for 루프를 사용하여 찾고있는 뷰 객체를 찾을 수 있다고 생각한다. 이것은 또 다른 질문을 제기한다. Wrt 성능은 Mongo를 사용하여 이와 같은 쿼리를 수행하는 것이 더 좋으며 컬렉션 전체를 반복하기 위해 전체 문서를 가져 와서 수동으로 수행하는 것이 좋습니다.
배열 내에서 개체 만 가져올 수 없습니다. 전체 문서를 가져와야합니다. 독자적으로 하위 문서를 원할 경우 집계 프레임 워크를 사용해야합니다. – cdbajorin
@cdbajorin "독자적으로"라고 말하면 내가 원하지 않는 _id 값을 가진 뷰를 필터링하는 것이 불가능하다는 것을 의미합니까? 아니면 당신이 찾고있는 쿼리가'result.scenes [0] .views [0]'과 같은 구조체를 제공한다는 것을 의미합니까? 나는 후자와 괜찮아. – JSideris