mongodb数据库的安装和使用

it2024-05-13  51

MongoDB简介

MongoDB是一个基于分布式文件存储的数据库。由C++语言编写。旨在为WEB应用提供可扩展的高性能数据存储 解决方案。

MongoDB是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库 的,它支持的数据结构非常松散,是类似json的bson格式,因此可以存储比较复杂的数据类型。 MongoDB最大的特点是它支持的查询语言非常强大,其语法有点类似于面向对象的查询语言,几乎可以实现类似 关系数据库单表查询的绝大部分功能,而且还支持对数据建立索引。 官网:https://www.mongodb.com

通过docker安装MongoDB

拉取镜像

docker pull mongo

创建数据挂载目录

mkdir -p /data/mongodb

创建并启动容器

docker run --name mongodb -p 27017:27017 -v /data/mongodb:/data/db -d --privileged=true mongo

进入容器

docker exec -it mongodb mongo

MongoDB基本操作

基本概念

为了更好的理解,下面与SQL中的概念进行对比:

SQL术语/概念MongoDB术语/概念解释/说明databasedatabase数据库tablecollection数据库表/集合rowdocument数据记录行/文档columnfield数据字段/域indexindex索引table joins表连接,MongoDB不支持primary keyprimary key主键,MongoDB自动将_id字段设置为主键

数据库以及表的操作

> show dbs admin 0.000GB config 0.000GB local 0.000GB #通过use关键字切换数据库 #说明:在MongoDB中,数据库是自动创建的,通过use切换到新数据库中,进行插入数据即可自动创建数据库 > use testdb switched to db testdb > show dbs admin 0.000GB config 0.000GB local 0.000GB #插入数据,数据库自动创建 > db.user.insert({id:1,name:"zhangsan"}) WriteResult({ "nInserted" : 1 }) > show dbs admin 0.000GB config 0.000GB local 0.000GB testdb 0.000GB #查看表 > show tables user > show collections user #删除集合(表) > db.user.drop() true #如果成功删除选定集合,则 drop() 方法返回 true,否则返回 false #删除数据库 > db.dropDatabase() { "dropped" : "testdb", "ok" : 1 }

新增数据

在MongoDB中,存储的文档结构是一种类似于json的结构,称之为bson(全称为:Binary JSON)。

> use testdb switched to db testdb #插入数据的两种方法 > db.user.insert({id:1,username:'zhangsan',age:20}) WriteResult({ "nInserted" : 1 }) > db.user.save({id:2,username:'lisi',age:25}) WriteResult({ "nInserted" : 1 }) #查询数据 > db.user.find() { "_id" : ObjectId("5f8fc97799ebb5fde4a50482"), "id" : 1, "username" : "zhangsan", "age" : 20 } { "_id" : ObjectId("5f8fc98999ebb5fde4a50483"), "id" : 2, "username" : "lisi", "age" : 25 }

更新数据

update() 方法用于更新已存在的文档。语法格式如下:

db.collection.update( <query>, <update>, [ upsert: <boolean>, multi: <boolean>, writeConcern: <document> ] )

参数说明:

query : update的查询条件,类似sql update查询内where后面的。update : update的对象和一些更新的操作符,也可以理解为sql update查询内set后面的upsert : 可选,这个参数的意思是,如果不存在update的记录,是否插入objNew,true为插入,默认是 false,不插入。multi : 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把按条件查出来多条 记录全部更新。writeConcern :可选,抛出异常的级别。 > db.user.find() { "_id" : ObjectId("5f8fc97799ebb5fde4a50482"), "id" : 1, "username" : "zhangsan", "age" : 20 } { "_id" : ObjectId("5f8fc98999ebb5fde4a50483"), "id" : 2, "username" : "lisi", "age" : 25 } # 更新数据,将age字段更新为22 > db.user.update({id:1},{$set:{age:22}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.user.find() { "_id" : ObjectId("5f8fc97799ebb5fde4a50482"), "id" : 1, "username" : "zhangsan", "age" : 22 } { "_id" : ObjectId("5f8fc98999ebb5fde4a50483"), "id" : 2, "username" : "lisi", "age" : 25 }

注意: 如果这样写,会删除掉其他的字段

> db.user.update({id:1},{age:25}

更新不存在的字段,会新增字段

>db.user.update({id:2},{$set:{sex:1}})

更新不存在的数据,默认不会新增数据 如果设置第一个参数为true,就是新增数据

>db.user.update({id:3},{$set:{sex:1}},true)

删除数据

通过remove()方法进行删除数据,语法如下:

db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } )

参数说明:

query :(可选)删除的文档的条件。justOne : (可选)如果设为 true 或 1,则只删除一个文档,如果不设置该参数,或使用默认值 false,则删 除所有匹配条件的文档。writeConcern :(可选)抛出异常的级别 #删除所有满足条件的数据 db.user.remove({age:25}) #仅删除第一条满足条件的数据 db.user.remove({age:25},true)

为了简化操作,官方推荐使用deleteOne()与deleteMany()进行删除数据操作

#删除id为1的第一条数据 db.user.deleteOne({id:1}) #删除所有数据 db.user.deleteMany({})

查询数据

MongoDB 查询数据的语法格式如下:

db.user.find([query],[fields] query :可选,使用查询操作符指定查询条件fields :可选,使用投影操作符指定返回的键。查询时返回文档中所有键值, 只需省略该参数即可(默认省略)

如果你需要以易读的方式来读取数据,可以使用 pretty() 方法,语法格式如下:

db.col.find().pretty()

插入测试数据

db.user.insert({id:1,username:'zhangsan',age:20}) db.user.insert({id:2,username:'lisi',age:21}) db.user.insert({id:3,username:'wangwu',age:22}) db.user.insert({id:4,username:'zhaoliu',age:22})

查询测试

#查询全部数据 db.user.find() #只查询id与username字段 db.user.find({},{id:1,username:1}) #查询数据条数 db.user.find().count() #查询id为1的数据 db.user.find({id:1}) #查询小于等于21的数据 db.user.find({age:{$lte:21}}) #and查询,age小于等于21并且id大于等于2 db.user.find({age:{$lte:21}, id:{$gte:2}}) #查询id=1 or id=2 db.user.find({$or:[{id:1},{id:2}]}) #分页查询:Skip()跳过几条,limit()查询条数 #跳过1条数据,查询2条数据 db.user.find().limit(2).skip(1) #按照age倒序排序,-1为倒序,1为正序 db.user.find().sort({age:-1})
最新回复(0)