我目前正在使用当前的PHP MongoDB\Driver。
我需要使用geoNear
查询从我当前位置获取点数。已设置所需的2dsphere index
,查询在控制台中工作并提供多个结果:
db.runCommand({geoNear: 'pois', near: [ 52.264633, 6.12485 ], spherical: true, maxDistance: 1000, distanceField: 'distance'})
由于以前的方法已弃用,我无法使用旧的aggregate
函数。
我现在正试图找到使用当前Query
或Command
类构建我需要的查询的正确方法。
我尝试的是以下内容:
$query = array(
'geoNear' => 'pois',
"near" => array(
52.264633,
6.12485
),
"spherical" => true,
"maxDistance" => 1000,
"distanceField" => "distance"
);
$cmd = new MongoDB\Driver\Command($query);
$returnCursor = $this->conn->executeCommand("database.pois", $cmd);
$arrReturn = $returnCursor->toArray();
return $arrReturn;
如果我使用它,我将返回此运行时错误:
"exception": [
{
"type": "MongoDB\\Driver\\Exception\\RuntimeException",
"code": 18,
"message": "Failed to decode document from the server."
}
]"
我无法为我的案例找到解决方案,而且我找不到更多有关此错误的信息。
如果我将Command
更改为Query
,则执行不会失败,但没有结果。
我的mongodb是版本3.2,我的PHP版本是PHP版本7.0.16-4 + deb.sury.org~trusty + 1而mongodb Exension是版本1.2.3
答案 0 :(得分:2)
您可以使用新驱动程序以下列方式使用聚合。
complete_(df, cols = setdiff(names(df), "Outcome"), fill = list(Outcome = 0))
答案 1 :(得分:0)
还有一个Library from Mongo可以扩展驱动程序的默认功能,使其更加用户友好
但由于它没有内置到php网站,很容易错过
MongoDB\Collection::aggregate($pipeline, $options)
其中
$pipeline = array(array(
'$geoNear'=> array(
'near' => array(
52.264633,
6.12485
),
'spherical' => true,
'maxDistance' => 1000,
'distanceField' => "distance"
)
));