MongoDB数据库

Mongodb

是一个非关系型数据库 存储形式为键值对 水平扩展很容易 常作为缓存数据库来使用

Mongodb的存储文档称之为 BSON 类似json对象 字段值可以包含其他的文档 、数组 以及文档数组

MongoDB和mysql的概念解析
sql概念mongodb的概念解释/说明
databasedatabase数据库
tablecollection表/集合
rowdocument行/文档
columnfield列/域
table join 表关联
primary keyprimary 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) 创建集合
  1. db.createCollection(集合名)

    db.createCollection('user')

  2. 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(

​ <query>, 查询的条件

​ <update>, 要更改的东西

​ {

​ <upsert> bool值 如果修改的数据查询不到 当前数据是否作为新数据插入 默认Flase 不插入

​ <multi> bool 值 如果匹配到多条 默认是更改一条 Flase 改为True则全部更改

​ }

)

update: &dollar;set &dollar;inc 俩个更新操作符

$set 直接修改

$inc 累加修改

实例

不使用更新操作符 会将文档的内容除了_id以外的内容替换成当前update的内容

db.user.update({"name":"张三"},{"age":38})

使用更新操作符号 &dollar;set 将年龄直接修改为30 其余当前文档的内容不会发生改变

db.user.update({"name":"李四"},{$set:{"age":30}})

使用更新操作符号 &dollar;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(
    <query>,  条件
    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()

相关推荐