我需要转换某些集合中的某些数据,并且这样做,我有以下脚本将数据克隆到一个临时集合中,在完成所有检查后,该临时集合将覆盖另一个。
这是脚本:
$projectStep = array(
'report_id' => 1,
'space' => 1,
'location' => array(
'type' => 'Point',
'coordinates' => array('$longitude', '$latitude')
),
'altitude' => 1,
'data' => 1
);
foreach ($collections as $coll) {
$outname = "{$coll}_geospatial";
$pipeline = array(
array('$project' => $projectStep ),
array('$out' => $outname)
);
$coll = $db->selectCollection($collection);
$coll->aggregate($pipeline);
}
它按照我在集合的一个子集上运行的测试中的预期工作,但是当我对整个集合执行时(超过3,503,245个文档,而我的测试集是一堆文档),我得到了以下内容错误:
exception 'MongoDB\Driver\Exception\ConnectionTimeoutException' with message 'Failed to send "aggregate" command with database: Failed to read 4 bytes: socket error or timeout'
它总是在从聚合语句开始5分钟之后发生。在创建MongoDB\Client实例(上面的代码中的socketTimeoutMS
)时,我曾尝试增加$db
而不解决问题。