我有一台MongoDB服务器,它收集了数十万个文档。
在PHP中,我只需要使用MongoDB\Driver获取符合查询过滤条件的文档数量。
在mongo-shell中,我只需执行以下操作:
db.samples.find({"location": {$geoWithin: {$geometry: ...reference_polygon... }}}).length下面的PHP查询将返回一个游标,其中包含我不需要的完整文档列表(可能是数千个文档),我只查找指定多边形内的样本数:
$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
发布于 2020-10-30 17:43:38
所以,最后,我找到了一种使用MongoDB\Driver\Command的方法。
代码如下,如果有人有更好的建议,请随时发表意见。
$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;https://stackoverflow.com/questions/64459321
复制相似问题