MongoDBの勉強を始めたのでメモしておきます。
MongoDBのデータ構造
--MongoDB
+--データベース
| +--コレクション
| | +--ドキュメント
| | +--ドキュメント
| |
| +--コレクション
| | +--ドキュメント
|
+--データベース
| +--コレクション
RDBとMongoDBのデータ構造の比較
- 以下表を参照。
| RDBでの呼称 | MongoDBでの呼称 |
|---|---|
| database | database |
| table | collection |
| row | document |
| column | field |
| index | index |
| primary key | _id field |
- _idの値について、自動的に一意な文字列が採番されます。
MySQLと比較したクエリ
データベース操作
| MySQL | MongoDB |
|---|---|
| SHOW DATABASES; | show dbs |
| USE testdb; | use testdb |
| CREATE DATABASE testdb; | useコマンドで自動生成 |
| DROP DATABASE testdb; | use testdb db.dropDatabase() |
| index | index |
| DESC testdb; | なし |
コレクション操作
| MySQL | MongoDB |
|---|---|
| CREATE TABLE products (...); | 自動生成 または db.createCollection("products") |
| ALTER TABLE products ADD ...; | 自動生成 |
| SHOW TABLES; | show collections |
| DROP TABLE products; | db.products.drop() |
| TRUNCATE TABLE products; | db.products.remove() |
ドキュメント操作
選択
| MySQL | MongoDB |
|---|---|
| SELECT * FROM products; | db.products.find() |
| SELECT name FROM products WHERE category='A' AND stock<=10 ORDER BY name; |
db.products.find( { category : 'A' , stock : { $lte : 10 } }, { name : 1 } ).sort({ name : 1}) |
| SELECT COUNT(*) FROM products; | db.products.count() |
| SELECT COUNT(*) FROM products WHERE name LIKE "%camera%" OR category='C'; |
db.products.find( { $or : [ { name : /camera/ }, { category : 'C' } ] } ).count() |
| SELECT COUNT(stock) FROM products; | db.products.find({ stock : { $exists : true } }).count() |
| SELECT * FROM products LIMIT 1; | db.products.findOne() |
| SELECT * FROM products LIMIT 5; | db.products.limit(5) |
挿入
| MySQL | MongoDB |
|---|---|
| INSERT INTO products VALUES('A',"camera case",5); |
db.products.insert( { category : 'A' , name : "camera case" , stock : 5 } ) |
更新
| MySQL | MongoDB |
|---|---|
| UPDATE products SET stock=10 WHERE category='A'; |
db.products.update( { category : 'A' }, { $set : { stock : 10 } }, false, true ) |
| UPDATE products SET stock=stock+10 WHERE category='A'; |
db.products.update( { category : 'A' }, { $inc : { stock : 10 } }, false, true ) |
削除
| MySQL | MongoDB |
|---|---|
| DELETE FROM products WHERE name="camera case"; |
db.products.remove( {name : "camera case"} ) |