mongodb 将数据存储为文档 数据结构是由键值对组成的 MongoDB 的文档类似于Json对象 字段的值可以是文档 数组 以及文档数组
MongoDB和MySQL概念的区别
SQL术语/概念 | MongoDB术语/概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 数据库的表/集合 |
row | document | 数据记录行/wen |
column | field | 字段列/域 |
index | index | 索引 |
table joins | 表连接/不支持 | |
primary key | primary key | MongoDB自动将_id设置为主键 |
需要注意的点
文档中的键值对 是有序的
MongoDB区分大小写
不要有重复的键
文档的键为字符串
文档的键不能以_作为开头
一 进入MongoDB数据库
(1) cd mongodb/bin目录
mongod.exe --dbpath=数据库安装位置
(2) 开启一个新的终端
cd mongodb/bin目录
mongo.exe
二 对于库的操作
(1) 查看数据库
show dbs
(2) 创建/选择数据库
use 库名
注意:
如果库不存在 则创建
库在 则进行数据库的切换
数据库创建出来并不会显示 需要在库里面创建集合 才能查看到
(3) 查看当前所在的数据库
db
db.getName()
(4) 创建集合
db.createCollection('集合名')
(5) 查看集合
show collections
(6) 插入文档
db.user.insert({name:"张三",age:18,sex:"男"})
注意:
在MongoDB里面 对于集合 文档操作 统一使用db
严格区分大小写
如果往不存在的集合插入数据 数据插入成功集合被创建
(7) 删除集合
db.collection.drop()
三 INSERT/SAVE 文档的添加
(1) insert 就是纯添加数据
db.collection.insert({文档})
(2) insert 插入多条文档
db.collection.insert(【{文档1},{文档2}...】)
注意:
如果不加【】 那么只有第一条数据才能插入成功
3.2X 以后建议使用
db.collection.insertOne()
db.user.insertOne({"name" : "李四", "age" : 20, "sex" : "女"})
db.collection.insertMany()
db.user.insertMany([{name:"张三",age:20,sex:"男"},{name:"王五",age:30,sex:"女"}])
(3) 使用save
插入文档
db.collection.save({文档})
覆盖文档
db.user.save({"_id" : ObjectId("5a5eeefcdc919fad4332d28f"), "name":"芙蓉姐姐"}))
注意:
当save指定唯一_id的时候 为覆盖 否则为添加文档
四 MongoDB的条件操作符
1. $gt 大于 db.collection.find({age:{$gt:10}})
2. $gte 大于等于 db.collection.find({age:{$gte:10}})
3. $lt 小于 db.collection.find({age:{$lt:10}})
4. $lte 小于等于 db.collection.find({age:{$lte:10}})
5. {key:value} db.collection.find({age:10})
6. $ne 不等于 db.collection.find({age:{$ne:10}})
7. 使用id查询 "_id" : ObjectId("5a5eee62dc919fad4332d28c")
8. /数据/ 包含查询 db.collection.find({name:/张/})
9. /^数据/ 以...开头 db.collection.find({name:/^张/})
10./数据$/ 以...结尾 db.collection.find({name:/四$/})
11. $in 在...里 db.collection.find({age:{$in:[10,20,30]}})
12 $nin 不在...里 db.collection.find({age:{$nin:[10,20,30]}})
五 UPDATE 修改
主体结构:
db.collection.update(
<query>,
<update>,
{
upsert:<boolean>,
multi:<boolean>
}
)
query: update的查询条件 类似于sql 的 where 后面的
update:更新操作符 $inc 累加修改 $set 直接修改 $unset
upsert: 当修改的数据不存在 是否作为新数据插入 默认false
multi: 当查询到多条数据的时候 是修改一条还是多条 默认false 只改一条
实例:
db.goods.update({name:"张三",age:18},{$set:{age:28}}) 将name为张三 age为18 的 将age改为28
更新操作符 $inc 和 $set
db.goods.update({name:"张三",age:18},{$set:{age:18}},{upsert:true}) 将name为张三 age为18 的 将age改为28 如果数据不存在则插入
db.goods.update({name:"张三",age:28},{$inc:{age:2}},{upsert:true}) 将name为张三 age为28的 年龄加2岁
db.goods.update({name:"张三"},{$set:{age:30}},{multi:true}) 将所有符合条件的数据 都进行修改
db.goods.update({age:{$gt:30}},{$set:{name:"李四"}},true,false)
$unset
db.collection.update({},{$unset:{age:14}})
注意:
当修改的键值对不存在的时候 则为添加新的键值对
upsert和multi可以不给键 进行使用 位置一一对应
3.2X 以后建议使用
db.collection.updateOne()
db.goods.updateOne({age:{$in:[28,40]}},{$inc:{age:10}})
db.collection.updateMany()
db.goods.updateMany({age:{$in:[18,30]}},{$inc:{age:10}})
六 FIND 查询
(1) 查询所有
db.collection.find()
(2) 指定字段进行显示或者不显示
db.collection.find(条件,{key:true/1,age:true/1}) #指定返回的键
db.user.find({},{name:true,age:true})
db.collection.find(条件,{key:false/0,age:false/0}) #指定除了当前的键 都返回
注意:
俩种显示和不显示的模式 不能混用(无法推断其它的键是否应返回)
db.user.find({},{name:true,age:false}) 错误的写法
_id键默认返回 需要主动设置为0/false 才可以隐藏
db.user.find({},{_id:0,name:true,age:true}) 正确的写法
(3)findOne 查询一条数据
db.collection.findOne()
(4) count 统计数据条数
db.collection.find().count()
(5) pretty 将数据展开来看
db.collection.find().pretty()
(6) AND 逻辑与
db.collection.find({key1:val1,key2:val2})
db.user.find({age:{$gt:18},sex:"男"})
db.user.find({age:{$gt:18,$lt:30}})
注意:
如果条件里 有俩个相同的field 那么后面的会将前面的覆盖掉
如:db.user.find({name:"张三",name:"李四"})
(7) OR 逻辑或
db.collection.find({$or:[条件1,条件2...]})
db.user.find({$or:[{name:"张三"},{name:"李四"}]})
(8) AND和OR的使用
db.collection.find({key:val,key:val,$or:[{条件1},{条件2}...]})
db.user.find({name:"张三",$or:[{age:18},{sex:"男"},{sex:"女"}]})
(9) LIMIT 取值
db.collection.find().limit(num) 从0取出num条文档
db.user.find().limit(3) #从0开始取3条文档
(10) SKIP 跳过
db.collection.find().skip(num)
db.user.find().skip(2)
(11) SKIP LIMIT 配合使用
db.collection.find().skip(num).limit(num)
(12) SORT 排序
使用1 和 -1进行排序
1代表升序
-1代表降序
db.collection.find().sort({key:1|-1})
db.user.find({},{age:true}).sort({age:-1}).limit(1)
db.user.find({},{age:true}).sort({age:1}).limit(1)
七 REMOVE 删除
主体结构:
db.collection.remove(
<query>,
{
justOne:<boolean>
}
)
参数说明
query: 删除文档的条件
justOne:(可选)是否只删除匹配到的一条 默认false
db.collection.remove({条件},1/0)
db.collection.remove({条件},true/false)
db.collection.remove({条件},{justOne:true/false})
实例
db.user.remove({age:18,sex:"女"})
db.user.remove({name:/张/})})
db.user.remove({name:/李/},1)
3.2X 以后建议
db.collection.deleteOne()
db.user.deleteOne({name:"李四"})
db.collection.deleteMany()
db.user.deleteMany({name:"李四"})
八 删除数据库
删除数据库之前 最后use一下
db.dropDatebase()
exit 退出MongoDB
九 MongoDB备份和恢复
备份
mongodump -h host -d dbname -o 导出的路径
mongodump -h127.0.0.1 -ddemo -oC:\mongodb
恢复
mongorestore -h host -d dbname path
mongorestore -h 127.0.0.1 -d demo C:\mongodb\demo
十 MySQL的备份恢复
备份
mysqldemp -uroot -p 库名>新的名.sql
恢复
mysql -uroot -p 库名<导入的sql文件名.sql