Mongodb
是一个非关系型数据库 存储形式为键值对 水平扩展很容易 常作为缓存数据库来使用
Mongodb的存储文档称之为 BSON 类似json对象 字段值可以包含其他的文档 、数组 以及文档数组
MongoDB和mysql的概念解析
sql概念 | mongodb的概念 | 解释/说明 |
---|---|---|
database | database | 数据库 |
table | collection | 表/集合 |
row | document | 行/文档 |
column | field | 列/域 |
table join | 表关联 | |
primary key | primary key | 主键手动添加/自动创建 |
一、进入mongodb数据库
(1) cd mongo的bin目录
(2) 输入 启动服务 并选择创建数据库的位置
mongod.exe --dbpath=D:\db
(3) 再打开一个终端
cd mongodb的bin目录
mongo.exe
(4) 开放端口让其他人连接,需要关闭防火墙
mongod.exe --bind_ip 0.0.0.0
(5) 连接带密码的mongodb
mongo ip:port/database -u username -p password
mongo database --host x.x.x.x --port 31935 -u username -p password
二、数据库的操作
(1) 查看所有数据库
show dbs
(2) 创建/切换数据库
use 数据库名
(3) 查看当前所在的数据库
db.getName()
(4) 创建集合
- db.createCollection(集合名)
db.createCollection('user')
- db.集合名.insert(文档)
db.goods.insert({"goodsname":"牛奶"})
(5) 查看所有的集合
show collections
(6) 删除集合
db.collection_name.drop()
如果遇到命名奇怪的集合,如数字名字的集合无法删除,可以使用如下
db.getCollection('123').drop()
注意:
mongodb区分大小写
(7) 修改集合名字
db.old_name.renameCollection("new_name")
三、数据的添加 INSERT
(1) insert 插入一条文档
db.集合名.insert({文档})
db.user.insert({'name':"张三",'age':18})
(2) insert插入多条文档
列表中存放多条文档
db.user.insert([{'name':'李四','age':20},{'name':'王五','age':25}])
3.XX 新的插入文档
(1) 插入一条文档
db.collection.insertOne()
db.user.insertOne({"name":"赵六","age":30})
(2) 插入多条文档
db.collection.insertMany()
db.user.insertMany([{"name":"赵六","age":30},{"name":'王五',"age":22}])
插入多条文档 不管是insert还是insertMany 都需要使用列表
insertMany 如果不适用列表 则报错
insert 插入多条不适用列表 则插入成功数据为第一条文档
四、update修改
主体结构
db.collection.update(
{
}
)
update: $set $inc 俩个更新操作符
$set 直接修改
$inc 累加修改
实例
不使用更新操作符 会将文档的内容除了_id以外的内容替换成当前update的内容
db.user.update({"name":"张三"},{"age":38})
使用更新操作符号 $set 将年龄直接修改为30 其余当前文档的内容不会发生改变
db.user.update({"name":"李四"},{$set:{"age":30}})
使用更新操作符号 $inc 将年龄值累加修改30 其余当前文档的内容不会发生改变
db.user.update({"name":"李四"},{$inc:{"age":30}})
upsert参数的使用
db.user.update({"name":"张三"},{$set:{"age":30}},true)
{ "_id" : ObjectId("5b0f68068829170dea936f21"), "name" : "张三", "age" : 30 }
multi 的使用
db.user.update({"name":"赵六"},{$set:{age:10}},{multi:true})
完整的修改语句
db.user.update({"name":"赵六"},{$set:{age:18}},true,true)
3.xx以后的修改
db.collection.updateOne()
实例
db.user.updateOne({"age":18},{$set:{age:10}})
db.collection.updateMany()
实例
db.user.updateMany({"name":'赵六'},{$set:{age:12}})
五、remove 删除
主体结构
db.collection.remove(
, 条件
justOne, bool值 默认flase 全部删除
)
实例
删除多条
db.user.remove({"name":"赵六"})
WriteResult({ "nRemoved" : 2 })
删除一条
db.user.remove({"name":"王五"},true)
db.user.remove({"name":"王五"},1)
清除集合中的所有文档数据
db.user.remove({})
3.xx版本以后的删除
db.collection.deleteOne()
db.user.deleteOne({'name':"李四"})
{ "acknowledged" : true, "deletedCount" : 1 }
db.collection.deleteMany()
db.user.deleteMany({'name':"李四"})
{ "acknowledged" : true, "deletedCount" : 2 }
六、查询
(1) find查所有
db.collection.find()
(2) 哪些字段显示与隐藏
指定显示某些字段 字段名:true
db.user.find({},{name:true}) 只显示name和id
db.user.find({},{name:true,age:true}) 显示name和age和id字段
指定除了某个字段以外的字段都显示
db.user.find({},{name:false,age:false})
注意:
自己定义的域 只能设置显示 或者不显示 不能一起设置
但是系统的id可以 因为不管你给其他域设置true或者false都会显示
只有这种可以
db.user.find({},{"_id":false,age:true})
(3) findOne 只查询一条
db.user.findOne({"age":28})
(4) count 统计
db.user.find().count()
db.user.find({age:18}).count()
(5) pretty 展开查看
db.user.find().pretty()
(6) 查询条件符
$gt 大于 db.user.find({age:{$gt:18}})
$gte 大于等于 db.user.find({age:{$gte:18}})
$lt 小于 db.user.find({age:{$lt:28}})
$lte 小于等于 db.user.find({age:{$lte:28}})
{key:val} 等于 db.user.find({age:28})
$ne 不等于 db.user.find({age:{$ne:28}})
/数据/ 模糊查询 db.user.find({name:/张/})
/^数据/ 以...作为开头 db.user.find({name:/^张/})
/数据$/ 以...作为结尾 db.user.find({name:/张$/})
$in 在...范围内 db.user.find({'age':{$in:[18,20]}})
$nin 不在...范围内 db.user.find({'age':{$nin:[18,20]}})
按照id来查询 db.user.find({"_id" : ObjectId("5b0fabcda14d4a753f75edc5")})
(7) and查询
db.user.find({"name":"张三","age":28})
db.user.find({"age":{$gt:18,$lt:28}})
#名字包含李的,并且年龄大于18并且小于28 只显示name字段
db.user.find({"name":/李/,"age":{$gt:18,$lt:28}},{"_id":false,'name':true})
(8) $or查询
db.collection.find({$or:[条件1,条件2...]})
查询年龄大于18 或者 小于28
db.user.find({$or:[{age:{$gt:18}},{age:{$lt:28}}]})
db.user.find({$or:[{name:/张/},{name:/三/}]})
(9) and 和 or的一起使用
主体结构:
db.user.find({名:值...,$or:[{条件1},{条件2}...]})
select * from user where name like '%三%' and (age=18 or age=28)
(10) limit 取值
db.collection.find().limit(num)
db.user.find().limit(2)
注意:
从头取出 num条
(11) skip 跳过num条
db.collection.find().skip(num)
db.user.find().skip(2)
(12) limit 和 skip的结合使用
db.collection.find().skip(num).limit(num)
db.user.find().skip(2).limit(2)
(14) sort 排序
db.collection.find().sort({key:1|-1}) #升序或者降序
db.user.find().sort({age:-1}).limit(1)
七、数据库的删除
删除之前最好use一下
db.dropDatabase()