如何将geoNear与当前的PHP MongoDB驱动程序一起使用?

时间:2017-03-15 16:01:53

标签: php mongodb php-7

我目前正在使用当前的PHP MongoDB\Driver

我需要使用geoNear查询从我当前位置获取点数。已设置所需的2dsphere index,查询在控制台中工作并提供多个结果:

db.runCommand({geoNear: 'pois', near: [ 52.264633, 6.12485 ], spherical: true, maxDistance: 1000, distanceField: 'distance'})

由于以前的方法已弃用,我无法使用旧的aggregate函数。

我现在正试图找到使用当前QueryCommand类构建我需要的查询的正确方法。

我尝试的是以下内容:

$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

2 个答案:

答案 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"
    )
));