自分用にまとめています
概要
- ドキュメント指向
- スキーマレス(データ構造を決めない)
- Databeseの中にCollectionをいくつも作れる
- Collectionの中にDocumentをいくつも作れる
Collection(Posts Usersなど)
→テーブル
Document
→レコード
- field: val;
- field: value;
- スキーマレス
コマンド一覧
database一覧
show hoge
databese作成
use hoge
Collection作成
db.createCollection("hoge");
database情報
db.stats();
database削除
db.dropDatabase();
Collection一覧
show collections;
Collection名を変更 users->customers
db.users.renameCollection("customers");
Collection削除
db.hoge.drop();
Document作成
db.hoge.insert(
{
name: "Taro Yamada",
score: 30
}
)
スキーマレス(tagsを追加)
db.hoge.insert({
name: "Taro Yamada",
score: 50,
tags: ["web", "mobile"]
});
jsを使ってinsertができる
for (var i = 0; i < 10; i++ ) {
db.hoge.insert({
score: Math.random();
});
}
Documentの数
db.hoge.count();
Document全データを表示
db.hoge.find();
Document全件削除
db.hoge.remove({});
teamがteam1のみ抽出
db.hoge.find({ team: "team-1" });
scoreが50以上を抽出
db.hoge.find({ score: { $gte: 50 } });
// $gte $gt $lte $lt 以上 未満
// $eq イコール
// $ne イコールでない
teamがteam1のみを抽出
db.hoge.find({ team: { $eq: "team-1" } });
nameに「t」が含まれるのを抽出(正規表現)
db.hoge.find({ name: /t/ });
teamの値を抽出
db.hoge.distinct("team");
nameに「i」が含まれていて、かつスコアが50点以上
db.hoge.find({ name: /i/, score: { $gte: 50 } });
nameに「i」が含まれている、またはスコアが50点以上
db.hoge.find({ $or: [{ name:/i/ }, { score: { $gte: 50 } }] });
scoreが52点または66点のものを抽出
db.hoge.find({ score: { $in: [52, 66] } });
ageが存在するDocumentを抽出
db.hoge.find({ age: { $exists: true } });
全データで表示するフィールドを指定(第2引数)
db.hoge.find({}, { name: true, score: 1 });
scoreを含まない全データを表示
db.hoge.find({}, { score: 0 });
idはデフォルトで表示されるのでidを非表示でscoreのみを表示。id以外は1と0、trueとfalseの乱用は不可
db.hoge.find({}, { score: 1, _id: 0 });
socreを小さい順に表示
db.hoge.find({}, { _id: 0 }).sort({ score: 1 });
3件のみ表示
db.hoge.find({}, { _id: 0 }).limit(3);
スコアが上位3名のものを表示
db.hoge.find({}, { _id: 0 }).sort({ score: -1 }).limit(3);
最初の1件のみを表示
db.hoge.findOne({}, { _id: 0 });
全データを3件目から表示
db.hoge.find({}, { _id: 0 }).skip(2);
yamadaさんのscoreのドキュメントを80に更新
db.hoge.update({ name: "yamada" }, { $set: { score: 80 } });
yamadaさんのscoreとteamのドキュメントを更新
db.hoge.update({ name: "yamada" }, { $set: { score: 90, team: "team-2" } });
setではない場合、すべてのドキュメントが変更、削除される
db.hoge.update({ name: "yamada" }, { name: "sato" score: 90 });
第3引数にmulti:trueにすると合致したドキュメント(team2)の全てのデータのscoreが0に変更される
db.hoge.update({ team: "team-2" }, { $set: { score: 0 }}, { multi: true });
特定のドキュメントをincで値を追加できる
db.hoge.update({ name: "yamada" }, { $inc: { score: 5 } });
特定のドキュメントをmulで掛け算できる
db.hoge.update({ name: "yamada" }, { $mul: { score: 2 } });
フィールドの名前を変更したい場合 socre->point
db.hoge.update({ name: "yamada" }, { $rename: { soore: "point" } });
フィールドを追加と値を入れる
db.hoge.update({ name: "yamada" }, { $set: { team: "team-4" } });
フィールドを削除(値も削除)
db.hoge.update({ name: "yamada" }, { $unset: { team: "" } });
存在しないフィールドに対して更新させたい場合は第3引数にupsertを書く(scoreが存在しなかった)
db.hoge.update({ name: "yamada" }, { name: "sato", score: 48 }, { upsert: true });
特定のドキュメントを削除
db.hoge.remove({ name: "taro" });
index情報表示
db.hoge.getIndexes();
降順でindexを追加
db.hoge.createIndex({ score: -1 });
indexを削除
db.hoge.dropIndex("score_1");
exitでMongoDBを抜ける
exit
バックアップ
mongodump -d mydb
データ復元
mongorestore --drop