2017-03-15 16 views
1

私は現在現在のPHP MongoDB\Driverで作業しています。現在のPHP MongoDB DriverでgeoNearを使用するには?

現在の場所からポイントを取得するには、geoNearクエリを使用する必要があります。

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

従来の方法は廃止されているので、私は古いaggregate機能を使用することはできません。必要な2dsphere indexは、すでにクエリがコンソールで動作し、複数の結果を提供し、設定されています。

現在、私は現在の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." 
    } 
]" 

を私は私の場合のための解決策を見つけることができませんでしたし、また、私はこのエラーの詳細を見つけることができませんでした。

CommandQueryまで変更すると、実行は失敗しませんが、結果はありません。

私のMongoDBは、バージョン3.2に私のPHPのバージョンであるPHPバージョン7.0.16-4 + deb.sury.org〜1 +信頼できるとMongoDBのExensionは、あなたが使用することができますバージョン1.2.3

答えて

2

です新しいドライバで次のように集約します。

$pipeline = array(array(
    '$geoNear'=> array(
    'near' => array(
     52.264633, 
     6.12485 
    ), 
    'spherical' => true, 
    'maxDistance' => 1000, 
    'distanceField' => "distance" 
))); 

$cmd = new \MongoDB\Driver\Command([ 
    'aggregate' => 'pois', 
    'pipeline' => $pipeline 
]); 

$returnCursor = $this->conn->executeCommand("database", $cmd); 
$arrReturn = $returnCursor->toArray(); 
+0

はどんなのがあります

あなたがこれを見つけた場所?私はこれについて何かを見つけることができませんでした。しかし、それは動作します、ありがとう。 – KhorneHoly

+0

ここに行きます。 http://php.net/manual/en/mongodb-driver-manager.executecommand.php – Veeram

+0

まあ、私はこれを完全に見落としました。 – KhorneHoly

0

それはもう少しユーザーフレンドリーにするために、ドライバのデフォルトの機能を拡張しますが

MongoDB\Collection::aggregate($pipeline, $options)を欠場するそのPHPのWebサイトに組み込まれていないその簡単なようLibrary from Mongoもあります

$pipeline = array(array(
    '$geoNear'=> array(
     'near' => array(
      52.264633, 
      6.12485 
     ), 
     'spherical' => true, 
     'maxDistance' => 1000, 
     'distanceField' => "distance" 
    ) 
)); 
関連する問題