如何访问MongoDB ODM中相互引用的文档字段?

How to access fields of documents referenced by each other in MongoDB ODM?

假设我有两个文档

用户和购买。所有的purchase都引用了一个User,Users里面有一个字段gender。

我想select男性客户购买的产品。所以我有性别,我想重复购买并定义他们的"gender"。

类似的东西

public function findByGender()
{
$query =
        $this->createQueryBuilder()
        ->field(""Purchase->User->gender"")->equals('male')
        ->getQuery()
        ;

}

当然,""..."" 之间的代码不起作用。我想知道是否可以,如果可以,我该怎么做?

您需要将此查询分成 2 个查询。首先 select 所有男性用户并将这些用户传递给第二个查询。我建议您对查询进行脱水,select 仅对必要的进行脱水。

$users = $this->createQueryBuilder()
    ->hydrate(false)
    ->select('_id')
    ->field('gender')->equals('male')
    ->getQuery()->execute()->toArray();

$products = $this->createQueryBuilder()
    ->hydrate(false)
    ->field('user.id')->in(array_keys($users))
    ->getQuery()->execute()->toArray();