ようへいの日々精進XP

よかろうもん

MongoDB のコマンド操作メモ(2)

モンゴメリ


クエリとか

条件を指定して検索

db.${collection_name}.count({ datetime:20140402, })

datetime20140402 であるレコードの件数を取得。

db.${collection_name}.find({ datetime:20140402, })

datetime20140402 であるレコードを取得する。

さらに datetime20140401 から 20140403 までの件数を知りたい場合には以下のように書くことが出来る。

db.${collection_name}.find({datetime : {$gte : 20140401,$lte : 20140403}})

運用系

db 名の変更は出来ますか?

出来ません...ので別名でコピーしましょう。

db.copyDatabase("hoge","huga","localhost")

コピーしたらコピー元(hoge)を削除しましょう。(参考:How do you rename a MongoDB database?

ダンプ

mongodump --host localhost --db ${DB_NAME} --collection ${COLLECTION_NAME} -q “{timestmp : {\$gte : 20140403}}" 

-q とかでクエリを投げて条件を指定してダンプすることが出来る。--db でデータベース名、--collection でコレクション名を指定する。もちろん、--host でリモートの MongoDB サーバーを指定することも可能。

レストア

デフォルトの場合にはダンプしたカレントディレクトリに dump という名前のディレクトリが生成される。dump ディレクトリ以下は下記のような構成となる。

.
└── dump
    └── ${DB_NAME}
        ├── ${COLLECTION_NAME}.bson
        └── ${COLLECTION_NAME}.metadata.json

2 directories, 2 files

ということでレストアは以下のように行う。

mongorestore --host localhost --db osugi --collection peeko ./dump/${DB_NAME}/${COLLECTION_NAME}.bson

ダンプした ${DB_NAME} とは異なるデータベースやコレクション名を指定してレストアを行うことが出来る。

capped collection 運用時のレストア注意点

capped collection を効かせているデータベースをダンプした場合にそのままレストアしようとすると幸か不幸か capped collection が有効な状態でレストアされてしまう。capped collection が無効な状態でレストアしたい場合には ${COLLECTION_NAME}.metadata.json 内の以下を削除することで capped collection を無効にしてレストアが出来た。

  "options": {
    "size": ${capped_size},
    "capped": true
  }
}

ひとこと

  • クエリをもっと覚えたいな