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を乗することで実際の距離になります。