まるまるこふこふ

数々の次元が崩壊し、全ての生命が塵と化すのを見てきた。私ほどの闇の心の持ち主でも、そこには何の喜びも無かった。

MySQL のコマンド ⇛ MongoDBのコマンド

メモ書き程度の能力

CREATE DATABASE [データベース名]

あらかじめdatabaseを作る必要はなく、 新しいデータベース名で use して ドキュメントやコレクションを作ると データベースも作成される。

USE [データベース名]

use hogefuga;

データベースの選択

SHOW DATABASE

show dbs

データベースの一覧を表示

DROP DATABASE

use hogefuga;
db.dropDatabase();

削除したいデータベースをuseしてdropDatabase

CREATE TABLE

db.createCollection("user_table")

あらかじめコレクションを作成しておく必要はなく、 INSERTしてしまえば勝手にコレクションも作成される。

SHOW TABLES

show collections

DROP TABLE

db.user_table.drop()

SELECT * FROM user_table;

db.user_table.find()

SELECT name FROM user_table;

db.user_table.find({}, {name:1})

find の第二引数に、{カラム名:0以外の何か}を入れる。 デフォでObjectIdもついてくるので、ObjectIdもいらなければ0を指定する。

SELECT * FROM user_table where age=17;

db.user_table.find({
    age : 17
});

SELECT * FROM user_table where age < 17;

SELECT * FROM user_table where age IN (17,18);

SELECT * FROM user_table where age = 17 or age = 18;

http://docs.mongodb.org/manual/reference/operator/query/

その他、◯◯というカラムが存在するかをチェックするために$existsがある。

// ageカラムが存在し、かつ20歳,30歳ではない。
db.user_master.find({
    age: {
        $exists: true,
        $nin: [ 20, 30 ]
    }
})

SELECT JOIN

不可能

SELECT * FROM user_table WHERE name like '%my name%'

db.user_table.find({
    name : /my name/
});

SELECT COUNT(*) FROM user_table;

db.user_table.find().count()

SELECT * FROM user_table LIMIT 10 OFFSET 100;

db.user_table.find().skip(100).limit(10);

ORDER BY

// 昇順
db.user_table.find().sort({age:1})
//降順
db.user_table.find().sort({age:-1})

GROUP BY

HAVING

SELECT SUM

aggregation を使う。

http://docs.mongodb.org/manual/reference/sql-aggregation-comparison/

INSERT

db.user_master.insert({
    name : "my name",
    age : 20
})

UPDATE

db.user_table.update({name:'my name'}, {$set:{age:17}})

age カラムがないレコードもage=17になるのでそれを防ぐには 検索条件に$existsを追加する。

DELETE

db.user_master.remove({age:{$gte:30}})

UPSERT

db.user_master.update( {name:'my name'} ,{age:17}, true)

第三引数にTRUEを入れる。

TRUNCATE

db.user_table.remove()

ALTER TABLE change column

db.user_master.update( { _id: 1 }, { $rename: { 'name': 'nickname'} } )

name カラムを nickname に変更

DUMP

# localhostのtest_dbにあるtest_collectionをバックアップする
$ > mongodump --host localhost --db test_db --collection test_collection

ユーザー管理

http://qiita.com/y-hara/items/83a86655bba48dc8b140

インデックスの確認

db.user_master.getIndexes();

インデックスの追加

db.user_score.ensureIndex({"score":1});

昇順でインデックスを貼る

db.user_score.ensureIndex({"score":1}, {"unique", true});

ユニークなインデックスを昇順で貼る

インデックスの削除

db.user_master.dropIndex({"score":1});

EXPLAIN

db.user_table.find().explain()

http://tweeeety.hateblo.jp/entry/20140311/1394528997