写在前面:mongodb作为一个非关系型数据库,不同于key-value的redis、有着类似于关系数据库的sql语言,并且支持灵活的存储数据类型。但是也存在着缺点,比如表与表之间的join关系、中文全文索引就不行。
环境:win7、mongodb:3.2.11
一、数据类型的对弈
| 基本概念 | mysql | mongo |
|---|---|---|
| 数据库(database) | db | |
| 表(table) | collection | |
| 行(rows) | document(Bson) | |
| 列(field) | field | |
| 索引 | index | |
| 聚合 | group、count等 | |
| 主键 | 自动设为_id |
二、sql的对比
1. 创建类
| 操作类型 | mysql | mongo |
|---|---|---|
| 创建 | CREATE TABLE tablename(…) | db.tablename.insert({name:’hebby’,age:10}) #insert时候自动创建表;也可以执行db.createCollection(‘tablename’) |
| 更新(增加列) | ALTER TABLE tablename ADD news DATETIME | db.users.update({},{$set:{news:new Date()}},{muliti:true}) |
| 更新(删除列) | ALTER TABLE tablename DROP COLUMN news | db.users.update({},{$set:{news:”}},{muliti:true}) |
| 创建索引 | CREATE INDEX id_user_name ON users(name) | db.createIndex({name:1},{name:’id_user_name’}) |
| 删除表 | DROP TABLE users | db.users.drop() |
2. 插入类
| 操作类型 | mysql | mongodb |
|---|---|---|
| 单个插入 | INSERT INTO users(id,name) VALUES (2,’lili’); | db.users.insert({id:2,name:’lili’}) |
| 批量插入 | INSERT INTO users(id,name) VALUES(2,’lili’),(3,’mimi’) | db.users.insertMany([{id:2,name:’lili’},{id:3,name:’mimi’}]) |
| 批量插入 | INSERT INTO users(id,name) VALUES(2,’lili’),(3,’mimi’) | db.users.insert([{id:2,name:’lili’},{id:3,name:’mimi’}]) |
3. 查询类
| 基础类型 | mysql | mongodb |
|---|---|---|
| SELECT * FROM users | db.users.find() | |
| SELECT id,name from users | db.users.find({},{id:1,name:1,_id:0}) | |
| SELECT * FROM users WHERE name=’lili’ | db.users.find({name:’lili’}) | |
| SELECT * FORM users WHERE name !=’lili’ | db.users.find({name:{$ne:’lili’}}) | |
| SELECT * FROM users WHERE name=’lili’ AND age=10 | db.users.find({name:’lili’,’age’:10}) | |
| SELECT * FROM users WHERE name=’lili’ OR age=10 | db.users.find({$or:[{name:’lili’},{age:10}]}) | |
SELECT * FROM users WHERE name='lili' AND age<10 OR type='off' | db.users.find({name:'lili',$or:[{age:$gt:{age:10}},{type:'off'}]}) | |
| SELECT * FROM users WHERE age>10 | db.users.find({age:{$gt:10}}) | |
| SELECT * FROM users WHREE age<10 | db.users.find({age:{$lt:10}}) | |
| SELECT * FROM users WHERE name like “%li%” | db.users.find({name:/li/}) | |
| SELECT * FROM users WHERE name like “li%” | db.users.find({name:/^li/}) | |
| SELECT * FROM users WHERE name=’lili’ ORDER BY id DESC | db.user.find({name:’lili’}).sort({id:-1}) | |
| SELECT * FROM users WHERE name=’lili’ ORDER BY id ASC | db.user.find({name:’lili’}).sort({id:1}) | |
| SELECT COUNT(*) FROM users | db.users.find().count() | |
| SELECT COUNT(num) FROM users | db.users.find({num:{$exists:true}}).count() | |
| SELECT COUNT(num) FROM users WHERE age<10 | db.users.find({age:{$gt:10}}).count() | |
| SELECT DISTINCT(name) FROM uses | db.users.distinct(name) | |
| SELECT * FROM users LIMIT 1 | db.users.findOne() | |
| SELECT * FROM uses | db.users.findMany() | |
| SELECT * FROM uses limit 2 SKIP 10 | db.users.find().limit(2).skip(10) |
4.更新类
| 操作类型 | mysql | mongodb |
|---|---|---|
| UPDATE users SET age=10 WHERE name=’lili’ | db.users.update({name:’lili’},{$set:{age:10}}) | |
| UPDATE users SET age=age+10 WHERE name=’lili’ | db.users.update({name:’lili’},{$inc:{age:10}}) |
5.删除类
| 操作类型 | mysql | mongodb |
|---|---|---|
| DELECT FROM users WHERE name=’lili’ | db.users.remove({name:’lili’}) | |
| DELECT FROM users | db.users.remove({}) |
本文对比了MongoDB与MySQL在数据类型、SQL操作等方面的异同,涵盖了创建表、插入数据、查询、更新及删除等常见操作。
2544

被折叠的 条评论
为什么被折叠?



