我想知道是否有相当于MySQL-Query:
"SELECT COUNT(*) FROM users" in MongoDB ODM?
Run Code Online (Sandbox Code Playgroud)
这可能有效:
$qb = $this->dm->createQueryBuilder('Documents\Functional\Users');
$qb->select('id');
$query = $qb->getQuery();
$results = $query->execute();
echo $query->count();
Run Code Online (Sandbox Code Playgroud)
但是,如果数据库中存在更复杂的文档,则不会返回所有ID以及这会如何影响性能.我不想发送大量数据只是为了计算.
小智 40
一小部分贡献:
如果以这种方式运行计数:
$count = $this->dm->createQueryBuilder('Documents\Functional\Users')
->getQuery()->execute()->count();
Run Code Online (Sandbox Code Playgroud)
Doctrine运行此查询:
db.collection.find();
Run Code Online (Sandbox Code Playgroud)
但是,如果代码如下:
$count = $this->dm->createQueryBuilder('Documents\Functional\Users')
->count()->getQuery()->execute();
Run Code Online (Sandbox Code Playgroud)
在这种情况下,Doctrine运行此查询:
db.collection.count();
Run Code Online (Sandbox Code Playgroud)
我不知道性能是否有所改善,但我认为最优化
我希望这是有帮助的
Jam*_*and 23
$count = $this->dm->createQueryBuilder('Documents\Functional\Users')
->getQuery()->execute()->count();
Run Code Online (Sandbox Code Playgroud)
以上将为您提供用户集合中的文档数量.有问题的查询不会返回所有文档,然后对它们进行计数.它会为集合生成一个游标,并从那里知道计数.只有在您开始迭代光标后,驱动程序才会开始从数据库中提取数据.
一个方便的性能操作符是eagerCursor(true),它将在水合之前检索查询中的所有数据并关闭光标.如果您知道要获取的数据,请使用此选项,并在查询后完成它.
如果你有引用,你知道你会迭代.对它们使用prime(true)方法.
如果要返回所有元素原始数据,可以在查询中使用hydrate(false)方法来禁用水合系统.
| 归档时间: |
|
| 查看次数: |
11302 次 |
| 最近记录: |