ドットインストール 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});


メモはとりあえずこの辺まで。