MongoDB series 5: mongo grammar vs. mysql grammar
- 2020-05-27 07:27:49
- OfStack
We always see our own advantages and disadvantages in the comparison, which is the same for mongodb. Comparative learning enables us to master the basic knowledge of mongodb as soon as possible.
mongodb vs. mysql commands
Relational database 1 is generally composed of three hierarchical concepts: database (database), table (table), and record (record). The non-relational database mongodb is composed of three levels: database (database), collection (collection), and document object (document). For tables in a relational database, mongodb has no concept of a relationship between rows and columns, which reflects the freedom of the schema.
The syntax commands are shown in the following table
MySQL |
MongoDB |
说明 |
mysqld |
mongod |
服务器守护进程 |
mysql |
mongo |
客户端工具 |
mysqldump |
mongodump |
逻辑备份工具 |
mysql |
mongorestore |
逻辑恢复工具 |
|
db.repairDatabase() |
修复数据库 |
mysqldump |
mongoexport |
数据导出工具 |
source |
mongoimport |
数据导入工具 |
grant * privileges on *.* to … |
Db.addUser() Db.auth() |
新建用户并权限 |
show databases |
show dbs |
显示库列表 |
Show tables |
Show collections |
显示表列表 |
Show slave status |
Rs.status |
查询主从状态 |
Create table users(a int, b int) |
db.createCollection("mycoll", {capped:true, size:100000}) 另:可隐式创建表。 |
创建表 |
Create INDEX idxname ON users(name) |
db.users.ensureIndex({name:1}) |
创建索引 |
Create INDEX idxname ON users(name,ts DESC) |
db.users.ensureIndex({name:1,ts:-1}) |
创建索引 |
Insert into users values(1, 1) |
db.users.insert({a:1, b:1}) |
插入记录 |
Select a, b from users |
db.users.find({},{a:1, b:1}) |
查询表 |
Select * from users |
db.users.find() |
查询表 |
Select * from users where age=33 |
db.users.find({age:33}) |
条件查询 |
Select a, b from users where age=33 |
db.users.find({age:33},{a:1, b:1}) |
条件查询 |
select * from users where age<33 |
db.users.find({'age':{$lt:33}}) |
条件查询 |
select * from users where age>33 and age<=40 |
db.users.find({'age':{$gt:33,$lte:40}}) |
条件查询 |
select * from users where a=1 and b='q' |
db.users.find({a:1,b:'q'}) |
条件查询 |
select * from users where a=1 or b=2 |
db.users.find( { $or : [ { a : 1 } , { b : 2 } ] } ) |
条件查询 |
select * from users limit 1 |
db.users.findOne() |
条件查询 |
select * from users where name like "%Joe%" |
db.users.find({name:/Joe/}) |
模糊查询 |
select * from users where name like "Joe%" |
db.users.find({name:/^Joe/}) |
模糊查询 |
select count(1) from users |
Db.users.count() |
获取表记录数 |
select count(1) from users where age>30 |
db.users.find({age: {'$gt': 30}}).count() |
获取表记录数 |
select DISTINCT last_name from users |
db.users.distinct('last_name') |
去掉重复值 |
select * from users ORDER BY name |
db.users.find().sort({name:-1}) |
排序 |
select * from users ORDER BY name DESC |
db.users.find().sort({name:-1}) |
排序 |
EXPLAIN select * from users where z=3 |
db.users.find({z:3}).explain() |
获取存储路径 |
update users set a=1 where b='q' |
db.users.update({b:'q'}, {$set:{a:1}}, false, true) |
更新记录 |
update users set a=a+2 where b='q' |
db.users.update({b:'q'}, {$inc:{a:2}}, false, true) |
更新记录 |
delete from users where z="abc" |
db.users.remove({z:'abc'}) |
删除记录 |
|
db. users.remove() |
删除所有的记录 |
drop database IF EXISTS test; |
use test db.dropDatabase() |
删除数据库 |
drop table IF EXISTS test; |
db.mytable.drop() |
删除表/collection |
|
db.addUser(‘test', 'test') |
添加用户 readOnly-->false |
|
db.addUser(‘test', 'test', true) |
添加用户 readOnly-->true |
|
db.addUser("test","test222") |
更改密码 |
|
db.system.users.remove({user:"test"}) 或者db.removeUser('test') |
删除用户 |
|
use admin |
超级用户 |
|
db.auth(‘test', ‘test') |
用户授权 |
|
db.system.users.find() |
查看用户列表 |
|
show users |
查看所有用户 |
|
db.printCollectionStats() |
查看各collection的状态 |
|
db.printReplicationInfo() |
查看主从复制状态 |
|
show profile |
查看profiling |
|
db.copyDatabase('mail_addr','mail_addr_tmp') |
拷贝数据库 |
|
db.users.dataSize() |
查看collection数据的大小 |
|
db. users.totalIndexSize() |
查询索引的大小 |
mongodb syntax description
There are many syntax of mongodb, such as multi-column index, which can be used for statistical function and support multi-condition query. However, multi-table query is not supported at present, so we can find a way to solve the problem of multi-table query through data redundancy. Examples are shown below.
Query all colls data
db.colls.find() //select * from colls
Query by specifying conditions
db.colls.find({ ' last_name': ' Smith'});//select * from colls where last_name='Smith'
Specify a multi-conditional query
db.colls.find( { x : 3, y : " foo " } );//select * from colls where x=3 and y='foo'
Specify a conditional range query
db.colls.find({j: {$ne: 3}, k: {$gt: 10} });//select * from colls where j!=3 and k>10
The query does not include something
db.colls.find({}, {a:0});// Query except a for 0 All the data outside
support
<
,
<
=,
>
,
>
= query, using symbol substitutions of $lt, $lte, $gt, $gte, respectively
db.colls.find({ " field " : { $gt: value } } );
db.colls.find({ " field " : { $lt: value } } );
db.colls.find({ " field " : { $gte: value } } );
db.colls.find({ " field " : { $lte: value } } );
You can also do a range query for a 1 field
db.colls.find({ " field " : { $gt: value1, $lt: value2 } } );
Does not equal query with the character $ne
db.colls.find( { x : { $ne : 3 } } );
The in query USES the character $in
db.colls.find( { " field " : { $in : array } } );
db.colls.find({j:{$in: [2,4,6]}});
not in query with the character $nin
db.colls.find({j:{$nin: [2,4,6]}});
Queried queries with the character $mod
db.colls.find( { a : { $mod : [ 10 , 1 ] } } )// where a % 10 == 1
$all query
db.colls.find( { a: { $all: [ 2, 3 ] } } );// The specified a That satisfies any value in the array
$size query
db.colls.find( { a : { $size: 1 } } );// The query queries the number of objects a The number of child objects is 1 The record of
$exists query
db.colls.find( { a : { $exists : true } } ); // There are a Object data
db.colls.find( { a : { $exists : false } } ); // There is no a Object data
$$type type query value of bsonhttp: / / bsonspec org/number according to the type of value
db.colls.find( { a : { $type : 2 } } ); // matching a for string Type data
db.colls.find( { a : { $type : 16 } } ); // matching a for int Type data
Use regular expression matching
db.colls.find( { name : /acme.*corp/i } );// Similar to the SQL In the like
Inline object queries
db.colls.find( { " author.name " : " joe " } );
Version 1.3.3 and later includes $not queries
db.colls.find( { name : { $not : /acme.*corp/i } } );
db.colls.find( { a : { $not : { $mod : [ 10 , 1 ] } } } );
sort sort ()
db.colls.find({ ' last_name': ' Smith'});//select * from colls where last_name='Smith'
8
limit() returns the number of restricted query data
db.colls.find({ ' last_name': ' Smith'});//select * from colls where last_name='Smith'
9
skip() skips some data
db.colls.find( { x : 3, y : " foo " } );//select * from colls where x=3 and y='foo'
0
The snapshot() snapshot ensures that no duplicate data is returned or objects are lost
count() counts the number of query objects
db.students.find({ ' address.state' : ' CA'}).count();// High efficiency
db.students.find({ ' address.state' : ' CA'}).toArray().length;// Efficiency is very low
group() groups query results similarly to the group by function in SQL
distinct() returns no duplicate values