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()