【发布时间】:2017-08-13 16:12:06
【问题描述】:
我正在尝试使用分组构建 Doctrine ODM 查询(我刚接触 Mongo,我有强大的 SQL 背景)。
我想获得在给定时间段内显示 2 次或更多的所有结果。
public function findDisplayedForCompany(string $companyId, DateTime $start)
{
$qb = $this->createQueryBuilder();
$qb->field('interactor')->equals($companyId)
->field('interactionDate')->gte($start)
->group(['interacted' => 'interacted'], ['count' => 0])
->reduce('function (obj, prev) { prev.count++; }')
->field('count')
->gt('1');
$query = $qb->getQuery();
return $query->execute();
}
很遗憾,上面的代码没有给我任何结果。
在 SQL 中,它将类似于 SELECT *, COUNT(*) count FROM x GROUP BY interacted HAVING COUNT(*) > 1
文档结构(很简单):
class Interaction
{
/**
* @MongoDB\Id
*/
protected $id;
/**
* @MongoDB\ReferenceOne(targetDocument="Company", storeAs="id")
* @var Company
*/
protected $interacted;
/**
* @MongoDB\ReferenceOne(targetDocument="Company", storeAs="id")
* @var Company
*/
protected $interactor;
/**
* @MongoDB\Field(type="date")
* @var \DateTime
*/
protected $interactionDate;
public function __construct(Company $interacted, Company $interactor)
{
$this->interacted = $interacted;
$this->interactor = $interactor;
$this->interactionDate = new \DateTime();
}
}
【问题讨论】:
-
你试过在 mongo shell 中写那个查询吗?
-
您介意分享您的文档结构吗?
标签: php doctrine-orm mongodb-query doctrine-odm