MongoDB笔记
{ "firstName":"John" , "lastName":"Doe" }
JSON 数组在方括号中书写:
数组可包含多个对象:
{ "employees": [ { "firstName":"John" , "lastName":"Doe" }, { "firstName":"Anna" , "lastName":"Smith" }, { "firstName":"Peter" , "lastName":"Jones" } ] }
在上面的例子中,对象 "employees" 是包含三个对象的数组。每个对象代表一条关于某人(有姓和名)的记录。
1、安装配置
2、创建用户
3、与Mql对照
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() |
查询索引的大小 |
4.插入数据
db.table.insert(....)
5.update更新数据
db.collection.update(<query>, <update>,{ upsert:<boolean>, multi:<boolean>, writeConcern:<document>})
参数说明:
- query : update的查询条件,类似sql update查询内where后面的。
- update : update的对象和一些更新的操作符(如$,$inc...)等,也可以理解为sql update查询内set后面的
- upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是false,不插入。
- multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条记录全部更新。
- writeConcern :可选,抛出异常的级别。
db.collection.save(<document>,{ writeConcern:<document>})
db.col.save({"_id":ObjectId("56064f89ade2f21f36b03136"),"title":"MongoDB","description":"MongoDB 是一个 Nosql 数据库","by":"Runoob","url":"http://www.runoob.com","tags":["mongodb","NoSQL"],"likes":110})7.删除数据
db.collection.remove(<query>,<justOne> //设置删除的条数,没有就是全部)2.6版本后
db.collection.remove(<query>,{ justOne:<boolean>, writeConcern:<document>})
参数说明:
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档。
- writeConcern :(可选)抛出异常的级别。
db.col.find().pretty()格式化显示数据
db.col.findOne().pretty()只显示一条
Conditional Operators : $lt <, $lte <=, $gt >, $gte >=
Conditional Operator : $ne //不等于
Conditional Operator : $in //属于
Conditional Operator : $nin //不属于
Conditional Operator : $mod //取模运算
Conditional Operator: $all //全部属于
Conditional Operator : $size //数量
Conditional Operator: $exists //字段存在
Conditional Operator: $type //字段类型
Conditional Operator: $or // 或
Regular Expressions //正则表达式
Value in an Array // 数组中的值
Conditional Operator: $elemMatch //要素符合
Value in an Embedded Object //内嵌对象中的值
Meta operator: $not //不是
Javascript Expressions and $where //
sort() //排序
limit() //限制取数据条数
skip() //跳过一定数值开始取
snapshot() //
count() // 数量
group() //分组
db.col.find({"by":"菜鸟教程","title":"MongoDB 教程"}).pretty()WHERE by='菜鸟教程' AND title='MongoDB 教程'
db.col.find({$or:[{"by":"菜鸟教程"},{"title":"MongoDB 教程"}]}).pretty()WHERE by='菜鸟教程' or title='MongoDB 教程'
db.col.find({"likes":{$gt:50}, $or:[{"by":"菜鸟教程"},{"title":"MongoDB 教程"}]}).pretty()'where likes>50 AND (by = '菜鸟教程' OR title = 'MongoDB 教程')'
db.col.find({likes :{$lt :200, $gt :100}})
Select*from col where likes>100 AND likes<200;
查找age除10模等于1的
取name元素数和$size数相同的信息
table.find({"name":{"$exists": True}}
取name存在的信息
table.find({"name":{"$type": 2}}
name类型为字符串的
type对应该类型表如下:
table.find({"name": {"$regex": r".*ee.*"}})
table.find({"info.name": "abeen"})
查找内部对象info的name等于abeen的信息
$query - 查询类似于sql中的 where
$orderby - 排序{x:1},1为升序 -1为降序
9.创建索引
一、基础
1.文档
null
|
{"x":null}
|
布尔
|
{"x":true}
|
32位整数
|
shell中这个类型不可用,在js中仅支持64位浮点数,所以32位整数会被自动转换
|
64位整数
|
shell也不支持这个类型,shell会使用一个特殊的内嵌文档来显示64位整数。
|
64位浮点数
|
{"x":3.14},{"x":3}这个也是浮点数。shell中的数字都是这种类型的。
|
字符串
|
{"x":"xxxx"}
|
符号
|
shell中也不支持这种类型,会把此转换成字符串
|
对象id
|
{"x":objectId()}
|
日期
|
{"x":new Date()}
|
正则表达式
|
{"x": /foobar/iU}
|
代码
|
{"x": function(){ alert('a')}}
|
二进制数据 |
二进制数据可以由任意字节的串组成,不过shell中无法使用
|
最大值
|
bson包括一个特殊类型,表示可能的最大值
|
最小值
|
bson包括一个特殊类型,表示可能的最小值 |
未定义
|
{"x":undefined}
|
数组 |
{"x":["a","b"]}
|
内嵌别的文档 |
{"x":{"foo":"bar"}}
|
5.修改
定位符 $
db.runCommand(