传统型数据库的缺点:
1、数据结构要求高,必须遵循三大范式
2、存在join这样的多表查询,使得数据库在扩展方面很艰难
3、企业级数据库的license价格贵,并且随着系统的规模,不断上升
MongoDB的优势,面向集合存储、动态查询、文件存储格式为Bson、完全索引
MySQL | MongoDB |
Table | Collection |
Row | Document |
Column | Field |
Joins | Embedded documents, linking |
MySQL | MongoDB |
INSERT INTO users (user_id, age, status) VALUES ('bcd001', 45, 'A') | db.users.insert({ user_id: 'bcd001', age: 45, status: 'A' }) |
SELECT * FROM users | db.users.find() |
UPDATE users SET status = 'C' WHERE age > 25 | db.users.update( { age: { $gt: 25 } }, { $set: { status: 'C' } }, { multi: true } ) |
增删改查:
增 insert :
insertOne
insertMany
删除:
remove/deleteOne/deleteMany
https://docs.mongodb.com/manual/reference/delete-methods/#additional-deletes
drop
https://docs.mongodb.com/manual/reference/method/db.collection.drop/
dropDatabase
https://docs.mongodb.com/manual/reference/method/db.dropDatabase/
改 update:
查 find:
查询条件 | MongoDB | MySQL |
$and | db.inventory.find( { status: "A", qty: { $lt: 30 } } ) | SELECT * FROM inventory WHERE status = "A" AND qty < 30 |
$in | db.inventory.find( { status: { $in: [ "A", "D" ] } } ) | SELECT * FROM inventory WHERE status in ("A", "D") |
$lt | db.inventory.find( { status: "A", qty: { $lt: 30 } } ) | SELECT * FROM inventory WHERE status = "A" AND qty < 30 |
$or | db.inventory.find( { $or: [ { status: "A" }, { qty: { $lt: 30 } } ] } ) | SELECT * FROM inventory WHERE status = "A" OR qty < 30 |
and & or | db.inventory.find( { status: "A", $or: [ { qty: { $lt: 30 } }, { item: /^p/ } ] } ) | SELECT * FROM inventory WHERE status = "A" AND ( qty < 30 OR item LIKE "p%") |
子查询:
数组查询:
普通查询: