首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >原则ODM - MongoDB分组

原则ODM - MongoDB分组
EN

Stack Overflow用户
提问于 2017-03-21 19:31:16
回答 1查看 218关注 0票数 0

我正在尝试构建带有分组的Doctrine查询(我刚到Mongo,我有很强的SQL背景)。

我想得到所有的结果,有两个或更多的显示在给定的时间。

代码语言:javascript
复制
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

文档结构(非常简单):

代码语言:javascript
复制
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();
}
}
EN

回答 1

Stack Overflow用户

发布于 2017-04-18 12:55:51

我找到了一些解决办法,这可以满足我的需要,但是我对它不满意,所以我仍然在寻求解决最初问题的帮助。

代码语言:javascript
复制
public function findDisplayedForCompany(string $companyId, $start)
{
    $qb = $this->createQueryBuilder();
    $qb->field('interactor')->equals($companyId)
        ->field('interactionDate')->gte($start)
        ->group(['company' => 'company'], ['count' => 0])
        ->reduce('function (obj, prev) { prev.count++; }');

    $query = $qb->getQuery();

    $results = $query->execute()->toArray();
    $ids = [];
    foreach ($results as $result) {
        if ($result['count'] > 1) {
            $ids[] = (string) $result['company'];
        }
    }

    return $ids;
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/42936533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档