首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在PHP中使用MongoDB\Driver查询获取find()结果的长度?

如何在PHP中使用MongoDB\Driver查询获取find()结果的长度?
EN

Stack Overflow用户
提问于 2020-10-21 16:10:19
回答 1查看 307关注 0票数 0

我有一台MongoDB服务器,它收集了数十万个文档。

在PHP中,我只需要使用MongoDB\Driver获取符合查询过滤条件的文档数量。

mongo-shell中,我只需执行以下操作:

代码语言:javascript
复制
db.samples.find({"location": {$geoWithin: {$geometry: ...reference_polygon... }}}).length

下面的PHP查询将返回一个游标,其中包含我不需要的完整文档列表(可能是数千个文档),我只查找指定多边形内的样本数:

代码语言:javascript
复制
$query = new MongoDB\Driver\Query( 
    ["location" => ['$geoWithin' => ['$geometry' => $reference_polygon]]],
    []
);
$cursor = $dbm->executeQuery("test.samples", $query);

即使减少投影以返回单个字段作为_id,也会显著增加计算时间。

有没有办法只获取标量数量的文档,并避免加载游标结果,然后像count($cursor->toArray())一样计算它

MongoDB服务器:4.4.1PHP版本: 7.4操作系统:Ubuntu20.04LTS

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-10-30 17:43:38

所以,最后,我找到了一种使用MongoDB\Driver\Command的方法。

代码如下,如果有人有更好的建议,请随时发表意见。

代码语言:javascript
复制
$database_name = "test";
$collection_name = "samples";
$query = new MongoDB\Driver\Query( 
    ["location" => ['$geoWithin' => ['$geometry' => $reference_polygon]]],
    []
);
$dbc = new MongoDB\Driver\Command(
    ['count' => $collection_name, "query" => (object)$query]
);
$cursor = $dbm->executeCommand($database_name, $dbc);
$n = (isset($cursor->toArray()[0]->n)) ? $cursor->toArray()[0]->n : 0;
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64459321

复制
相关文章

相似问题

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