如何访问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();
假设我有两个文档
用户和购买。所有的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();