MongoDB ODM选择计数(*)等效
我想知道是否有一个与MySQL查询等价的查询:MongoDB ODM选择计数(*)等效,mongodb,doctrine-odm,Mongodb,Doctrine Odm,我想知道是否有一个与MySQL查询等价的查询: 从用户中选择计数(*) 在MongoDB ODM中 这可能会奏效: $qb=$this->dm->createQueryBuilder('Documents\Functional\Users'); $qb->选择('id'); $query=$qb->getQuery(); $results=$query->execute(); echo$query->count(); 但若数据库中有更复杂的文档,那个么并没有返回所有的ID,这会如何影响性能。
从用户中选择计数(*)
在MongoDB ODM中
这可能会奏效:
$qb=$this->dm->createQueryBuilder('Documents\Functional\Users');
$qb->选择('id');
$query=$qb->getQuery();
$results=$query->execute();
echo$query->count();
但若数据库中有更复杂的文档,那个么并没有返回所有的ID,这会如何影响性能。我不想为了计数而发送太多数据
$count = $this->dm->createQueryBuilder('Documents\Functional\Users')
->getQuery()->execute()->count();
上面将给出用户集合中的文档数。有问题的查询不会返回所有文档,然后对它们进行计数。它生成一个指向集合的游标,并从那里知道计数。只有当您开始迭代光标时,驱动程序才会开始从数据库中提取数据
一个方便的性能操作符是游标(true),它将在查询之前检索查询中的所有数据并关闭游标。如果您知道要获取的数据,并且在查询完成后就可以使用它
如果你有你知道你将要迭代的引用。对它们使用prime(true)方法
如果要返回所有元素的原始数据,可以在查询中使用水合物(false)方法禁用水合系统。小贡献:
如果以这种方式运行计数:
$count = $this->dm->createQueryBuilder('Documents\Functional\Users')
->getQuery()->execute()->count();
条令运行此查询:
db.collection.find();
db.collection.count();
但是,如果代码如下所示:
$count = $this->dm->createQueryBuilder('Documents\Functional\Users')
->count()->getQuery()->execute();
在本例中,请运行此查询:
db.collection.find();
db.collection.count();
我不知道性能是否有改进,但我认为这是最理想的
我希望这对Doctrine ODM 2有帮助在调用之前,您可以将查询类型切换到
count
getQuery
:
return $this->createQueryBuilder()
->field('storage')->equals($storage)
->field('priority')->in($priorities)
->count()
->getQuery()
->execute();
这是一个有效的论点。使用->计数()->获取查询()->执行();这是一条路。从文件的措辞来看,这听起来没有什么区别。对于这两种情况,“返回与
find()
查询匹配的文档计数”。这意味着其中任何一个最终都将调用find()
。这个答案是从MongoDB ODM上链接的,可能需要一些澄清。通过查询生成器发出计数将利用(请参阅:)。此外,MongoCursor::count()和MongoCollection::count()都调用相同的命令。(续)请参阅上下文实现。如果不开始迭代,则创建MongoCursor对象的开销最小(驱动程序不会与服务器通信,光标仅保存其构造函数参数和选项)-(