하위 문서가있는 스키마가 있습니다.Mongo 집합과 일치하는 하위 문서 만 반환
// Schema
var company = {
_id: ObjectId,
publish: Boolean,
divisions: {
employees: [ObjectId]
}
};
내 쿼리와 일치하는 모든 하위 문서 (부서)를 찾아야합니다. 2 개의 일치 항목을 사용해야하는 것으로 보입니다. 하나는 초기 문서를 필터링하고 두 번째 항목은 결과 $ unwind 작업에서 일치하는 하위 문서를 필터링합니다. 더 효율적인 방법이 있습니까?
// Query
this.aggregate({
$match: {
'publish': 1,
'divisions.employees': new ObjectId(userid)
}
}, {
$unwind: '$divisions'
}, {
$match: {
'divisions.employees': new ObjectId(userid)
}
}
나는 이걸 찾았지만, 내가 필요로하는 것이 확실하지 않다.
감사합니다. 실제 코드가 상당히 복잡하기 때문에 집계가 필요하지 않습니다. 그래서 가장 효율적인 방법은 두 개의 match에서'division.employee' 쿼리를 유지하고 인덱스를 추가하는 것입니다. 두 번이나 두 번째에 division.employee를 넣어야하는지 잘 모르겠습니다. – cyberwombat
둘 다 최고라고 생각합니다. 첫 번째 $ 경기는 색인을 사용하고 가능한 한 적은 수의 문서로 다음 단계를 처리하는 반면, 두 번째 $ 일치에서 올바른 결과를 얻으려면 조건이 필요합니다. – wdberkeley