構造

データベース / コレクション(Table) / ドキュメント(Record) / フィールド(Column)

シェル

>help

DBをつくる
>use hogedb;

コレクションを作る
>db.createCollection("posts");
>show collections;

コレクションを削除する
>db.posts.drop();

状態を見る
>db.stats();

DBを削除する
>db.dropDatabase();

>db.help;

データの挿入

> for (var i = 0; i < 10; i++) { db.posts.insert({name: "hoge" + i}); }
削除
> db.users.remove({name:"user-10"});

データの抽出

マッチ

teamが2
> db.users.find({team: 2});
teamが2 で名前だけ表示
> db.users.find({team: 2},{name: true});

否定,gt,lt

> db.users.find({team: {$ne: 1}});
> db.users.find({score: {$gt: 40}});
> db.users.find({score: {$gte: 40}});
> db.users.find({score: {$gte: 40,$}});
> db.users.find({score: {$gte: 41,$lt: 70}});

正規表現

> db.users.find({name:{$regex:/user-[2-5]/}});

ソート

昇順
> db.users.find().sort({score: 1});
降順
> db.users.find().sort({score: -1});

抽出件数

1件抽出
> db.users.findOne();
3件抽出
> db.users.find().limit(3);
n件目から抽出開始(0オリジン)
> db.users.find().limit(2);
{ "_id" :  ObjectId("52e6cdba41b11fa7c6588ab2"), "name" :  "user-0", "team" :  0, "score" :  71 }
{ "_id" :  ObjectId("52e6cdba41b11fa7c6588ab3"), "name" :  "user-1", "team" :  1, "score" :  5 }
> db.users.find().skip(2).limit(2);
{ "_id" :  ObjectId("52e6cdba41b11fa7c6588ab4"), "name" :  "user-2", "team" :  2, "score" :  18 }
{ "_id" :  ObjectId("52e6cdba41b11fa7c6588ab5"), "name" :  "user-3", "team" :  0, "score" :  22 }

抽出数

> db.users.find().count();
10

集約

> db.users.distinct("name");
[
"user-0",
"user-1",
"user-2",
"user-3",
"user-4",
"user-5",
"user-6",
"user-7",
"user-8",
"user-9"
]
=|SH|

集合

> db.users.find({name: {$in: ["user-0","user-1"]}});
{ "_id" :  ObjectId("52e6cdba41b11fa7c6588ab2"), "name" :  "user-0", "team" :  0, "score" :  71 }
{ "_id" :  ObjectId("52e6cdba41b11fa7c6588ab3"), "name" :  "user-1", "team" :  1, "score" :  5 }
否定
> db.users.find({name: {$nin: ["user-0","user-1"]}});

> db.users.find({"email": {$exists: true}});
否定
> db.users.find({"email": {$exists: false}});

インデックス

検索を高速にする.
張りすぎると挿入,削除が遅くなる.

> db.users.ensureIndex({score: 1});
> db.users.dropIndex({score: 1});
> db.users.getIndexes();

ユニーク指定をする
> db.users.ensureIndex({name: 1},{unique: true});
> db.users.insert({name: "user-1"});
E11000 duplicate key error index:  blog_app.users.$name_1  dup key:  { :  "user-1" }

ドキュメントの更新

置き換え
> db.users.update({name: "user-8"},{$set: {score: 90}});
> db.users.find({name: "user-8"});
{ "_id" :  ObjectId("52e6cdba41b11fa7c6588aba"), "name" :  "user-8", "team" :  2, "score" :  90 }

NG
> db.users.update({name: "user-9"},{score: 90});
こうなってしまう
{ "_id" :  ObjectId("52e6cdba41b11fa7c6588abb"), "score" :  90 }

インクリメント
> db.users.update({name: "user-8"},{$inc: {score: 5}});
> db.users.find({name: "user-8"});
{ "_id" :  ObjectId("52e6cdba41b11fa7c6588aba"), "name" :  "user-8", "team" :  2, "score" :  95 }
> db.users.update({name: "user-8"},{$inc: {score: -3}});
> db.users.find({name: "user-8"});
{ "_id" :  ObjectId("52e6cdba41b11fa7c6588aba"), "name" :  "user-8", "team" :  2, "score" :  92 }

要素の削除
> db.users.update({name: "user-7"},{$unset: {score: 1}});
> db.users.find({name: "user-7"});
{ "_id" :  ObjectId("52e6cdba41b11fa7c6588ab9"), "name" :  "user-7", "team" :  1 }

要素のリネーム
> db.users.update({name: "user-7"},{$rename: {team: "ers.find({name: "user-7"});
{ "_id" :  ObjectId("52e6cdba41b11fa7c6588ab9"), "myteam" :  1, "name" :  "user-7" }

ドキュメントが存在しない場合の扱い(upsert:第3オプション:true/false)
> db.users.update({name: "user-10"},{$inc: {score: 5}},true);

一括更新(multi:第4オプション:true/false)
> db.users.update({},{$inc: {score: 5}},false /* upsert */,true /* multi */);

要素のType変更
Integer -> String
> db.users.find().forEach(function(obj){obj.date = "" + obj.date;db.users.save(obj);});

コマンドを記載したファイルでの更新

~%cat command.js 
db.users.remove({name:  "user-10"});

~%mongo blog_app command.js
MongoDB shell version:  2.4.9
connecting to:  blog_app

%mongo blog_app
MongoDB shell version:  2.4.9
connecting to:  blog_app
> load("command.js");
true

バックアップ

%mongodump --db blog_app
%mongorestore --drop

インポート

%mongoimport --db money -collection kakeibo -type csv -fields date,tran,name,memo,category --file data.csv

日付について

日付はUTC時間でstoreされる.
> db.posts.insert({date:  new Date(2010,8,25)});
> db.posts.find();
{ "_id" : ObjectId("546fb04b4fc2dea49b4a665c"), "date" :  ISODate("2010-09-24T15:00:00Z") }
アプリ側はJavaScript Dateオブジェクトでやりとりすればよい.
> db.posts.find({date: new Date(2010,8,25)});
「The Little MongoDB Book」

コメントをかく


「http://」を含む投稿は禁止されています。

利用規約をご確認のうえご記入下さい

管理人/副管理人のみ編集できます