一、常见的NoSQL数据库分类
二、mongoDB的基本概念
2.1 mongodb中的基本的概念是文档,集合,数据库
当插入第一个文档时,集合就被创建
2.2 MongoDB的数据类型
三、mongoDB的基本操作
3.1.1 mongoDB的shell命令连接
./mongod --dbpath=/var/lib/mongo --bind_ip=10.19.186.213 --port=27017
-dbpath数据库路径
bind_ip绑定的ip地址
port绑定端口
客户端启动命令
[root@host-10-19-186-213 bin]# ./mongo 10.19.186.213:27017 MongoDB shell version v5.0.2 connecting to: mongodb://10.19.186.213:27017/test?compressors=disabled&gssapiServiceName=mongodb Implicit session: session { "id" : UUID("0d056d3f-432e-4bb5-856d-39514b5a7485") } MongoDB server version: 5.0.2 ================ Warning: the "mongo" shell has been superseded by "mongosh",
MongDB创建数据库
use DATABASE_NAME
eg:
> use andy
switched to db andy
如果数据库不存在,则创建数据库,否则切换到指定的数据
显示所有数据库
> show dbs admin 0.000GB config 0.000GB local 0.000GB runoob 0.000GB security 0.000GB test 0.000GB
可以看到刚才创建的数据库andy并不存在,查询资料发现,只有在插入数据的情况下才能显示数据库
> db.andy.insert({"name":"andy"}) WriteResult({ "nInserted" : 1 }) > show dbs admin 0.000GB andy 0.000GB config 0.000GB
删除数据库
db.dropDatabase()
eg:
> use andy
switched to db andy
> db.dropDatabase()
{ "ok" : 1 }
> show dbs
admin 0.000GB
config 0.000GB
local 0.000GB
runoob 0.000GB
security 0.000GB
test 0.000GB
可以看到andy数据库已经被删除了
删除集合
db.collection.drop()
插入文档
文档的数据结构和JSON基本一样。
所有存储在集合中的数据都是BSON格式。
BSON是一种类json的一种二进制形式的存储格式,简称Binary JSON。
MongoDB使用insert()或者save()方法向集合汇总插入文档
db.COLLECTION_NAME.insert(document)
COLLECTION_NAME是集合名称,相当于关系型数据库的表概念
不存在则创建,存在则往里面插入一条数据
document也可以是一个参数
db.an.insert({"gender":"male"})
an是集合,在an这个集合中插入一个文档(相当于关系型数据库的行概念)
定义一个变量
> document=({"name":"Sicilia"},{"age":18})
{ "age" : 18 }
> db.an.insert(document)
结果:表名集合中也可以插入一个变量
> db.an.find()
{ "_id" : ObjectId("61306950615fc7d492c425af"), "name" : "Sicilia" }
{ "_id" : ObjectId("61306bbd615fc7d492c425b0"), "age" : 18 }
{ "_id" : ObjectId("61306bff615fc7d492c425b1"), "gender" : "male" }
更新文档
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 :可选,抛出异常的级别。
下面我们就将 "age" : 18 修改为 "age" : 1
> db.an.update({"age":18},{$set:{"age":1}}) WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 }) > db.an.find() { "_id" : ObjectId("61306950615fc7d492c425af"), "name" : "Sicilia" } { "_id" : ObjectId("61306bbd615fc7d492c425b0"), "age" : 1 } { "_id" : ObjectId("61306bff615fc7d492c425b1"), "gender" : "male" }
删除文档
db.collection.remove( <query>, { justOne: <boolean>, writeConcern: <document> } )
参数说明:
- query :(可选)删除的文档的条件。
- justOne : (可选)如果设为 true 或 1,则只删除一个文档。
- writeConcern :(可选)抛出异常的级别。
示例:
只删除第一条匹配的记录 > db.an.remove({"age":1},{justOne:1}) WriteResult({ "nRemoved" : 1 }) > db.an.find() { "_id" : ObjectId("61306950615fc7d492c425af"), "name" : "Sicilia" } { "_id" : ObjectId("61306bff615fc7d492c425b1"), "gender" : "male" } >
删除所有数据
> db.an.remove({}) WriteResult({ "nRemoved" : 2 }) > db.an.find() >
查询文档
db.COLLECTION_NAME.find()
find()方法以非结果话的方式来显示所有文档
如果你需要以易读的方式来读取数据,可以使用 pretty() 方法
db.col.find().pretty()
多个条件查询,逗号隔开,类似于and
>db.col.find({key1:value1, key2:value2}).pretty()
OR 条件
db.col.find({$or:[{key1: value1},{key2:value2}]}).pretty()
操作符
MongoDB中条件操作符有: (>) 大于 - $gt (<) 小于 - $lt (>=) 大于等于 - $gte (<= ) 小于等于 - $lte
例如,找出某字段大于等于100的记录
db.col.find({字段名: {$gte : 100}})
Limit与Skip方法
如果想要返回指定数量的数据记录使用limit()方法,括号中可以填写数量
> db.col.find().limit(1).pretty() { "_id" : ObjectId("61307758615fc7d492c425b2"), "title" : "PHP 教程", "description" : "PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。", "by" : "MongoDB中文网", "url" : "http://www.mongodb.org.cn", "tags" : [ "php" ], "likes" : 200 } >
skip()方法来跳过指定数量的数据,skip方法同样接受一个数字参数作为跳过的记录条数。
> db.col.find().skip(1).pretty() { "_id" : ObjectId("613077a2615fc7d492c425b3"), "title" : "Java 教程", "description" : "Java 是由Sun Microsystems公司于1995年5月推出的高级程序设计语言。", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "java" ], "likes" : 150 }
排序方法
在MongoDB中使用使用sort()方法对数据进行排序,sort()方法可以通过参数指定排序的字段,并使用 1 和 -1 来指定排序的方式,其中 1 为升序排列,而-1是用于降序排列。
db.COLLECTION_NAME.find().sort({KEY:1})
索引 exsureIndex
如果没有索引,MongoDB在读取数据时必须扫描集合中的每一个文档,效率很低
索引是特殊的数据结构,索引存储在一个易于遍历读取的数据集合中,索引是对数据库表中一列或多列的值进行排序的一种结构
db.COLLECTION_NAME.ensureIndex({KEY:1})
key为你要创建的索引字段,1为指定按升序创建索引,如果要按降序来创建索引指定为-1