PHP에서 MongoDB ODM 쿼리 빌더를 사용하여 일치하는 임베디드 문서 만 반환하는 데 문제가 있습니다. 각 임베디드 문서에는 생성시 생성 된 MongoID가 있습니다.Doctrine MongoDB ODM - 쿼리 빌더를 사용하여 일치하는 임베디드 문서 만 반환
{
"_id" : ObjectId("59f889e46803fa3713454b5d"),
"projectName" : "usecase-updated",
"classes" : [
{
"_id" : ObjectId("59f9d7776803faea30b895dd"),
"className" : "OLA"
},
{
"_id" : ObjectId("59f9d8ad6803fa4012b895df"),
"className" : "HELP"
},
{
"_id" : ObjectId("59f9d9086803fa4112b895de"),
"className" : "DOC"
},
{
"_id" : ObjectId("59f9d9186803fa4212b895de"),
"className" : "INVOC"
}
]
}
가 지금은 함께 (즉 클래스 내 기준을 충족 포함 된 문서가 클래스에서 데이터베이스에만 클래스에서 검색하려는 : 다음은 프로젝트 수집 의 내 문서 구조 특정 ID) .This 내가 쿼리 건물입니다 방법은 다음과 같습니다
$qb = $dm->createQueryBuilder('Documents\Project');
$projectObj = $qb
->field('id')->equals("59f889e46803fa3713454b5d")
->field('classes')->elemMatch(
$qb->expr()->field("id")->equals(new \MongoId("59f9d7776803faea30b895dd"))
)
->hydrate(false)
->getQuery()
->getSingleResult();
먼저 내가 재치 일치를 h 프로젝트 ID 그러면 임베디드 문서 클래스 ID와 일치합니다. .I 또한 집계 쿼리 작성에 노력
{
"_id" : ObjectId("59f889e46803fa3713454b5d"),
"projectName" : "usecase-updated",
"classes" : [
{
"_id" : ObjectId("59f9d7776803faea30b895dd"),
"className" : "OLA"
}
]
}
을하지만, 교리 (질문의 시작 참조) 전체 프로젝트 기록을 반환 :이 같은 만 포함 된 문서를 반환 OLA 그것을 기다리고 있었다
$qb = $dm->createAggregationBuilder('Documents\Project');
$projectObj = $qb
->match()
->field('id')->equals($projectId)
->field('classes._id')->equals(new \MongoId($classId))
->execute()
->getSingleResult();
누군가가이 문제에 관해서 좀 도와 줄래 다음과 같이 여전히 결과는 동일하다 $match 집계에 내가 집계 빌더로 생성 된 쿼리는 무엇입니까? 어떻게 내가 위에서 언급 한 원하는 결과를 얻을 쿼리를 작성할 수 있습니다.
ODM은 전체 문서에서 작동합니다. 앱에서 필터링하거나 [aggregation] (http://docs.doctrine-project.org/projects/doctrine-mongodb-odm/en/latest/reference/aggregation-builder.html)을 사용하십시오. –
@AlexBlex 나는 그걸로도 노력했지만 여전히 결과는 같았습니다. 집계 쿼리 작성기로 질문을 업데이트했습니다. – Seeker
'찾기'와 정확히 일치하는 단일 '일치'단계를 사용하고 있습니다. 문서를 다시 모양 짓기 위해서는 적어도 [project] (https://docs.mongodb.com/manual/reference/operator/aggregation/project/#pipe._S_project) 단계가 필요합니다. 사용할 수있는 [배열 함수] (https://docs.mongodb.com/manual/meta/aggregation-quick-reference/#array-expressions)를보십시오. –