Mongodbの利用方法
Mongodbの操作方法を簡単にまとめました。特に位置情報をインデックスにして
検索できるあたりは有効に活用できそうです。
データベースの操作
データベースの一覧を見る
show dbs;
利用するデータベースに移動する
use hoge
データベースの情報を調べる
db.stats();
エクスポート
# mongoexport -d test2 -c predTide -out predTide.csv
コレクションの操作
コレクションの一覧を表示
show collections;
コレクションを作成
db.createCollection('foo');
ドキュメントの操作
fooコレクションにドキュメントを挿入する。ドキュメントの形式はJSONデータとなる。
db.foo.insert({"name" : "hanako"});
ドキュメントの一覧表示。ドキュメントが表示される。
db.foo.find();
nameが”hanako”に一致するドキュメントを抽出
db.foo.find({"name":"hanako"});
座標系
座標のインデックスを作成
db.gmalocation.ensureIndex({loc: "2dsphere"});
インデックスは、地表を平面で扱う2dと、球面で扱う2dsphereがある。
正確な距離を測定したい場合は、2dsphereの方が良いでしょう。
近傍検索
db.gmalocation.find({loc: {$nearSphere:[ 139.556972,35.363928]}}).limit(3);
近傍検索で、距離などの情報を表示したい場合はrunCommandでクエリーを実行します。
db.runCommand({'geoNear':'gmalocation', near : [ 139.556972,35.363928 ], num: 1,spherical:true})
{
"waitedMS" : NumberLong(0),
"results" : [
{
"dis" : 0.0015311082321477106,
"obj" : {
"_id" : ObjectId("56de98a4b2055ff2d118617c"),
"location-ja" : "湘南港",
"no" : "75",
"symbol" : "D8",
"longitude" : "139.29",
"location" : "shonanko",
"latitude" : "35.18",
"loc" : [
139.48333333333332,
35.3
]
}
}
],
"stats" : {
"nscanned" : 16,
"objectsLoaded" : 11,
"avgDistance" : 0.0015311082321477106,
"maxDistance" : 0.0015311082321477106,
"time" : 0
},
"ok" : 1
}
距離はdisフィールドに、地球の半径距離6378kmを乗することで実際の距離になります。