最近、mongodbを触る機会があったので、使うことが多そうなmongodbのコマンド、クエリーについてまとめました。
###データベース一覧
show dbs
###使うデータベースの選択、データベース作成
use dbname
データベースがなければ作られます。
###データベース削除
db.dropDatabase()
###コレクション一覧
show collections
###コレクションコピー
db.collectionname.copyTo("collectionname2")
###コレクション作成
db.createCollection("collectionname")
###コレクション削除
db.collectionname.drop()
###検索結果表示
db.collectionname.find({}).orderBy({col1: 1}).limit(10).skip(10).toArray()
db.collectionname.find({col1: "aaa", col2: {$ne: "bbb"}, col3: {$lt: 10}}, {col1: true}).sort({col1: 1, col2: -1}).limit(10).skip(10).toArray()
findの2つ目の引数は、表示、非表示にするカラムの指定です。
sortの値は1がasc昇順、-1はdesc降順になります。
skipはMySQL等のoffsetに該当します。
###データ作成
db.collectionname.insert({col1: "aaa", col2: "bbb", col3: "ccc"})
###データ更新
db.collectionname.update({col1: "aaa"}, {$set: {col1: "aaaa", col2: "bbbbb", col4: {a: 1, b: 2} }})
$setつけないとデータが丸ごと指定したものに更新されるので、要注意です。
db.collectionname.update({col1: "aaaa"}, {$unset: {col2: 1, col4.a: 1}})
$unsetで指定する値は影響しません。col4.aのように、入れ子になっている特定の値だけunsetすることもできます。
db.collectionname.update({col1: "aaaa"}, {$unset: {col2: 1, col4.a: 1}, {upsert: false, multi: true}})
updateは、デフォルトではデータ1つしか更新されません。複数のデータを更新したい場合は引数を追加してmulti: trueを指定します。
upsertオプションをtrueにすると、該当データがなければ作成されるようになります。
###データベースダンプ
mongodump --db databasename --out dirname
指定したディレクトリが作成され、その中に データベース名のディレクトリ/各ファイル
という形でjson、bsonファイルが作成されます。
###データベースリストア
mongorestore --db databasename dirname
dirnameは、ダンプしたファイルやファイルの入っているディレクトリ名を指定します。
存在しないDB名を指定すれば、そのDBが作成されます。