ドットインストール MongoDBの基礎 #5..#12 - いろいろ
より。
コレクションの作成・表示
> use blog_app; > db.createCollection('posts'); > db.createCollection('users'); > show collections;
コレクションの削除
> db.users.drop();
> // db.コレクション名.drop();
db['コレクション名']['drop']();
でも大丈夫みたい。まあJavaScriptだものね。
コレクション名の変更
> db.posts.renameCollection('entries');
ドキュメントの挿入
> db.users.insert({name: 'taguchi', email: 'taguchi [at] gmail.com'}); > db.users.insert({name: 'fkoji', lang: ['php', 'ruby']});
ドキュメントの検索
> db.users.find(); // 条件なし検索 > db.users.find({name: 'fkoji'}); // nameが'fkoji'のドキュメントを検索
findは一応覚えてたみたい。
ドキュメントの削除
> db.users.remove();
連番データの挿入
まーJavaScriptでfor文書いてあげてるだけですな。
> db.users.remove(); > for (var i = 0; i < 10; ++i) { ... db.users.insert( ... { name: 'user-' + i, ... team: i % 3, ... score: Math.random() * 100 | 0 ... } ... ); ... } > db.users.find();
ドキュメントの検索条件
> // teamが0のドキュメントを表示 > db.users.find({team: 0}); > // teamが0のドキュメントのnameのみ表示 > db.users.find({team: 0}, {name: true}); > // teamが0でない(team != 0)ドキュメントを表示(!==なのかなあ?) > db.users.find({team: {'$ne': 0}}); > // scoreが40より大きい(score > 40)ドキュメントを表示 > db.users.find({score: {'$gt': 40}}); > // $gt: >, $gte: >=, $lt: <, $lte: <= > // scoreが40より大きく、60より小さいドキュメントを表示 > db.users.find({score: {'$gt': 40, '$lt': 60}}); > // nameが/user-[0-5]/iに一致するドキュメントを表示 > db.users.find({name: {'$regex': /user-[0-5]/i}});
検索結果の操作など
> // scoreの昇順でソート > db.users.find().sort({score: 1}); > // scoreの降順でソート > db.users.find().sort({score: -1}); > // 1件だけ表示 > db.users.findOne(); > // 3件だけ表示 > db.users.find().limit(3); > // 2番目のドキュメントから3件だけ表示 > db.users.find().skip(2).limit(3); > // 検索結果の件数を表示 > db.users.find().count(); > // teamのユニークな値の一覧を表示 > // usersデータベース内の全コレクションに含まれるteamの値は0, 1, 2しかない > db.users.distinct('team'); [ 0, 1, 2 ]
ちょっと高度なドキュメントの検索条件
> // nameに'user-0', 'user-1'を含むドキュメントを検索 > db.users.find({name: {'$in': ['user-0', 'user-1']}}); > // nameに'user-0', 'user-1'を含まないドキュメントを検索 > db.users.find({name: {'$nin': ['user-0', 'user-1']}}); > // emailフィールドが存在するドキュメントのみ検索 > db.users.find({email: {'$exists': true}}); > // emailフィールドが存在しないドキュメントのみ検索 > db.users.find({email: {'$exists': false}});
インデックス
> // インデックスの表示 > db.users.getIndexes(); > // 昇順にインデックスを貼る?(インデックスはわかるが昇順ってどういうこと?) > db.users.ensureIndex({score: 1}); > // 降順にインデックスを貼る? > db.users.ensureIndex({score: -1}); > // インデックスの削除 > db.users.dropIndex({score: 1}); > // nameがドキュメント内でユニークでないと挿入できないインデックス(制約?)を貼る > db.users.ensureIndex({name: 1}, {unique: true});
メモはとりあえずこの辺まで。