MongoDBのPHPは、距離クエリ、緯度と経度を格納するために使用します

https://blog.csdn.net/qq_40012295/article/details/84861466

コマンドを使用してデータベースを作成します。

ユーザーを使用して
コレクションを作成するためのコマンドを使用して:

db.createCollection(ユーザー)
2dsphereインデックスを作成するためのコマンドを使用して:

db.user.createIndex({LOCATION: "2dsphere"})
緯度と経度のデータにPHPコード:

パブリック関数uploadMongoDBLocation()
{
$文書= [
'名前' => '张三'、
'場所' =>
フロート)115.036545、
フロート)36.313916、
]
]。
$マネージャー=新しい\ MongoDBの\ドライバ\マネージャ( 'MongoDBは://127.0.0.1:27017');
$バルク=新しい\ MongoDBの\ドライバ\ BULKWRITE。
$ bulk->($ドキュメント)を挿入します。//可连续使用多个挿入
$ writeConcern =新しい\ MongoDBの\ドライバーの\ WriteConcern(\ MongoDBは\ドライバーの\ WriteConcern ::過半数、1000); /
$ RES = $マネージャ- > executeBulkWrite( 'user.user'、$バルク、$ writeConcern)。
$ RESを返します。
}
PHP代码查询距离。

        注:このコマンドは、バージョンによって使用され、使用量の違いがあるかもしれない、ここで使用するのMongoDBのバージョンは3.6.5です

パブリック関数findMongoDBLocation()
{
$文書= [
'geoNear' => 'ユーザ'、
'近く' => [
'タイプ' => 'ポイント'、
'座標' =>(フロート) '115.042725'、(フロート) '36 0.312956' ]
]、
'球面' => trueを
'minDistance' => 0、
'maxDistance' => 100000、
'NUM' =、> 1000
]。
$コマンド=新しい\ MongoDBの\ドライバ\コマンド($文書)。
$マネージャー=新しい\ MongoDBの\ドライバ\マネージャ( 'MongoDBは://127.0.0.1:27017');
$カーソル= $マネージャ- > executeCommand( 'ユーザー'、$コマンド)。
$アイテム= [];
foreachの($文書として$カーソル){
$合計=カウント($ document-> 結果);
IF($合計> 0){
foreachの($結果として$ document->結果){
$項目= json_decode(json_encode($ result-> OBJ)、真の);
$項目[ '距離'] = INTVAL($ result-> DIS)。
未設定($アイテム[ '_ ID'])。
$アイテム[] = $アイテム。
}
}
}
$の項目を返します。
}

---------------------
著者:トム新人
出典:CSDN
オリジナルます。https://blog.csdn.net/qq_40012295/article/details/84861466
著作権表示:この記事では、ブロガーのオリジナルの記事、再現され、ボーエンのリンクを添付してください!

 

 

 

https://zhuanlan.zhihu.com/p/51839804

MongoDBは近くの人々を実現します

 

自分自身に対するすべての人の罪のない妊娠中のBiは、ボトルにこの無邪気なドリフトが、一部の人は、そう、11月に、ポルノコンテンツや広告の普及を活用する:テンセントは最近、「ボトルをドリフト」張小龍既製品本製品の誇りに、諺に第30夜遅く、テンセントは、ボトルをドリフト閉じました。だから、別のおなじみのマイクロチャネル機能として「近い」と、それは既製品ではないでしょうか?このようようにRedisのは、MySQL、Postgresqlの、MongoDBのとよう:今日、我々は説明しません、もちろん、今日の我々の議論を達成するための多くの方法があるか近くの人が気付いて、です。さて、今日は近くのMongoDB人を達成するためにLBS機能を使用します!

、MongoDBのプロフィール

MongoDBは、高性能なC ++開発、オープンソース、スキーマ文書データベースのデータベースのNoSQLです。MongoDBはMongoDBの中に格納されたドキュメント指向ドキュメントJSON形式、バイナリJSON(BSON)です。公式ウェブサイトのアドレスは次のとおりです。https://www.mongodb.com/ 主な機能は次のとおりです。強力なパフォーマンス、高可用性、水平スケーリング機能を提供します。完全にインデックス化、クエリ、サーバー回復の間でデータのレプリケーションとフェイルオーバーのサポートをサポートしています。C ++、Rubyの、ジャワ、Pythonのためのサポート 、PHP、C、C#、Javaスクリプト、Perlのようにして。

二、MongoDBのリレーショナルデータベース比較

リレーショナル・データベースの概念はdatabasedatabaseデータベースの概念のMongoDB tablecollectionデータベーステーブル/行コレクションrowdocumentデータ記録/データフィールドcolumnfield文書/ドメインインデックスindexindexを記載しました

第三に、準備

ダウンロードし、インストールのMongoDBデータベースを、ダウンロードしてインストールRobomongoをあなたは小さなシリーズを相談することができれば、私は知りません!

第四に、データ準備

「若い男性:データベースに一括挿入データは、db.user.insertMany()を実行し、MAGEメイジデータベースを使用するように切り替え、ユーザが文書名JSON配列を通過し、insertMany()バルク挿入コマンド、{「name」はです「」アドレス: 『江西省南昌青山湖市場及び品質管理』、 『性別』:1、LOC:[115.993121,28.676436]}ユーザデータの代わりにどこ性別:0 1女性の代表者、男性に代わって{LNG:115.993067、LAT:28.67606}が、公式の推薦アレイ、LOCは、緯度と経度の配列であり、当然のことながら、LOCとすることができます。

db.user.insertMany([
 {'name':'杨帅哥', 'address':'江西省南昌市青山湖区市场和质量监督管理局', 'gender':1, loc:[115.993121,28.676436]},
 {'name':'王美眉', 'address':'江西省南昌市青山湖区创新一路职位小厨', 'gender':0, loc:[116.000093,28.679402]},
 {'name':'张美眉', 'address':'江西省南昌市青山湖区紫阳大道1916号', 'gender':0, loc:[115.999967,28.679743]},
 {'name':'李美眉', 'address':'江西省南昌市青山湖区云中城', 'gender':0, loc:[115.995593,28.681632]},
 {'name':'彭美眉', 'address':'江西省南昌市青山湖区北京东路1666号', 'gender':0, loc:[115.975543,28.679509]},
 {'name':'赵美眉', 'address':'江西省南昌市青山湖区市场一路大润发', 'gender':0, loc:[115.968428,28.669368]},
 {'name':'廖美眉', 'address':'江西省南昌市南昌县奥林匹克中心', 'gender':0, loc:[116.035262,28.677037]},
 {'name':'余帅哥', 'address':'江西省南昌市南昌县科技学院瑶湖校区', 'gender':1, loc:[116.02477,28.68667]},
 {'name':'吴帅哥', 'address':'江西省南昌市青山湖区创新一路母婴店', 'gender':1, loc:[116.002384,28.683865]},
 {'name':'何帅哥', 'address':'江西省南昌市青山湖区紫阳大道2999号', 'gender':1, loc:[116.000821,28.68129]},
])

第五に、インデックスは2Dを設定しました

私のポイントに2次元平面上に格納されたデータは、LBSを照会したいので、2Dインデックスを設定します。db.user.createIndex({ 'LOC': "2D" は})インデックスフィールドのLOCです。

人に近い第六に、クエリ200メートル

あなたが距離を計算するために使用することができれば、あなたは、あなた自身や$ geoWithin近く$、手動で距離を計算、$ geoNear命令を使用することができ、利用者の現在位置のすべての指導の緯度と経度の最初の近くの人々が、照会するだけでなく、あなたがいないデータのみを取得したい場合は離れて取得します。ここでは近くの人々の$ geoNear指示照会2000メートルを使用。

db.user.aggregate({  $geoNear:{  near: [115.999567,28.681813], // 当前坐标  spherical: true, // 计算球面距离  distanceMultiplier: 6378137, // 地球半径,单位是米,那么的除的记录也是米  maxDistance: 2000/6378137, // 过滤条件2000米内,需要弧度  distanceField: "distance" // 距离字段别名  } }) 

あなたが詳細をお知りになりたい場合は、ここではこれまでに、近くの友人のための検索を完了するためのMongoDB指数2D平面の使用は、小さなシリーズをプルアップする歓迎します!

 

おすすめ

転載: www.cnblogs.com/rxbook/p/10954762.html
おすすめ