モンゴメリ
- お久しぶりですモンゴメリ
クエリとか
条件を指定して検索
db.${collection_name}.count({ datetime:20140402, })
datetime
の 20140402
であるレコードの件数を取得。
db.${collection_name}.find({ datetime:20140402, })
datetime
の 20140402
であるレコードを取得する。
さらに datetime
が 20140401
から 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 } }
ひとこと
- クエリをもっと覚えたいな