一:MongoDB介绍
MongoDB是一种分布式的文档数据库,是一种非关系型数据库nosql。以数据库、集合(collecetion)、文档来组织数据
安装方式:
sudo apt-get install mongodb
MongoDB的配置文件:/etc/mongodb.conf
查看MongoDB的进程信息:ps -ef | grep mongodb
查看MongoDB的版本 : mongo --version
进入mongo的环境:mongo
停止mongo服务:sudo systemctl stop mongodb
启动mongo服务:sudo systemctl start mongodb
二:操作MongoDB
1.数据库操作
1.进入指定数据库 use 数据库名(若数据库不存在则创建数据库)
> use runoob
switched to db runoob> dbrunoob>
2.查看所有的数据库 show bds
> show dbs
local 0.078GBtest 0.078GB>
3.删除当前数据库 语法: db.dropDatebase()
db.dropDatabase() #删除当前数据库,默认是删除test数据库
#查看所有数据库> show dbs admin (empty) local 0.078GBrunoob 0.078GB#进入runoob数据库> use runoobswitched to db runoob#删除当前数据库> db.dropDatabase(){ "dropped" : "runoob", "ok" : 1 }#检查是否删除成功> show dbsadmin (empty)local 0.078GB2.集合操作
1.创建一个集合 db.createCollection(“集合名称”,[options])
参数说明:name:要创建的集合名称 options:可选参数,指定有关内存大小及索引的选项
注意:如果直接向一个集合插入数据文档,则会自动创建该集合,若你在创建集合时没有进入数据库,则会使用默认数据库‘test’
2.显示当前库中所有的集合 show collections
eg:
> db.runoob.insert({'name':'菜鸟'})
WriteResult({ "nInserted" : 1 })> show dbsadmin (empty)local 0.078GBrunoob 0.078GB#创建test数据库> use testswitched to db test#创建‘runoob’数据库> db.createCollection('runoob'){ "ok" : 1 }#查看runoob数据库中的集合;> show collectionsrunoobsystem.indexes#下面是带有几个关键参数的 createCollection() 的用法:创建固定集合 mycol,整个集合空间大小 6142800 KB, 文档最大个数为 10000 个。> db.createCollection('mycol',{ capped : true, autoIndexId : true, size : 6142800, max : 10000}){ "ok" : 1 }#直接像不存在的集合插入文档 > db.mycol2.insert({'name':'菜鸟'})WriteResult({ "nInserted" : 1 })> show collectionsmycolmycol2runoobsystem.indexes>
3.删除集合 使用drop方法
#语法格式:
db.collection.drop()eg:
#进入test数据库
> use testswitched to db test#查看数据库中的集合> show collectionsmycolmycol2runoobsystem.indexes#删除mycol2集合> db.mycol2.drop()true#查看删除后的集合列表> show collectionsmycolrunoobsystem.indexes> 3.文档操作
1.向集合中插入数据 使用insert()方法或者save()方法
插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。
#语法
db.COLLECTION_NAME.insert(document)eg:
#向mycol插入文档
> db.mycol.insert({title: 'MongoDB', description: 'MongoDB 是一个 Nosql 数据库', by: 'lzs',url: 'www.baidu.com',tags: ['mongodb', 'database', 'NoSQL'],likes: 100})WriteResult({ "nInserted" : 1 })#查询mycol中的所有文档> db.mycol.find(){ "_id" : ObjectId("5b1508fc95ece25c9b710db7"), "title" : "MongoDB", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "lzs", "url" : "www.baidu.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100 }#将文档定义成一个变量> document=({title: 'MongoDB', ... description: 'MongoDB 是一个 Nosql 数据库',... by: 'lzs',... url: 'www.baidu.com',... tags: ['mongodb', 'database', 'NoSQL'],... likes: 100... });{ "title" : "MongoDB 教程", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "菜鸟教程", "url" : "http://www.runoob.com", "tags" : [ "mongodb", "database", "NoSQL" ], "likes" : 100}#将document插入mycol> db.mycol.insert(document)WriteResult({ "nInserted" : 1 })> WriteResult({ "nInserted" : 1 }) 2.更新文档 使用update()和save()方法
#update()方法用于更新已存在的文档。语法格式如下:
db.collecetion.update(
<query>,
<update>,
{
upsert:<boolean>,
multi:<boolean>,
writeConcern:<document>
})
#参数说明
query update的查询条件,类似于sql update查询内的where
update update的对象和一些更新的操作符(如$,$inc...),也可以理解为sql update查询内set后面的
upsert 可选,这个参数的意思是,如果不UCUN在update的记录,是否插入objNew,true为插入,默认是false,不插入
multi 可选,mongodb 默认是false,只更新找到的第一条记录,如果这个参数为true,就把查出的的多条记录全部更新
writeConcern 可选,抛出异常的级别
eg: update
#在集合col中 插入如下数据:db.col.insert({ title: 'mongo', description: 'mongo is a nosql datebase', by: 'lzs', url: 'www.baidu.com', tags: ['mongodb','database','nosql'], likes: 100 }) #接着我们通过update()方法来更新标题(title):> db.col.update({'title':'mongo'},{$set:{'title':'mongooooo'}})WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })> db.col.find().pretty(){ "_id" : ObjectId("5b1529ed94a0f497f88cecbb"), "title" : "mongooooo", "description" : "mongo is a nosql datebase", "by" : "lzs", "url" : "www.baidu.com", "tags" : [ "mongodb", "database", "nosql" ], "likes" : 100}> #可以看到标题(title)由原来的 "MongoDB 教程" 更新为了 "MongoDB"。以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。>db.col.update({'title':'MongoDB 教程'},{$set:{'title':'MongoDB'}},{multi:true})。。。。。更多实例只更新第一条记录:db.col.update( { "count" : { $gt : 1 } } , { $set : { "test2" : "OK"} } );全部更新:db.col.update( { "count" : { $gt : 3 } } , { $set : { "test2" : "OK"} },false,true );只添加第一条:db.col.update( { "count" : { $gt : 4 } } , { $set : { "test5" : "OK"} },true,false );全部添加加进去:db.col.update( { "count" : { $gt : 5 } } , { $set : { "test5" : "OK"} },true,true );全部更新:db.col.update( { "count" : { $gt : 15 } } , { $inc : { "count" : 1} },false,true );只更新第一条记录:db.col.update( { "count" : { $gt : 10 } } , { $inc : { "count" : 1} },false,false );#save()方法
save方法通过传入的文档爱替换已有的文档。语法:
db.collection.save(
<document>,
{
writeConcern:<document>})
参数说明:
document:文档数据。
writeConcern:可选,抛出异常的级别3
以下实例中我们替换了 _id 为 56064f89ade2f21f36b03136 的文档数据:
db.col.save({ "_id" : ObjectId("5b1529ed94a0f497f88cecbb"), "title" : "MongoDB", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "lzssss", "url" : "http://www。bbbbbbbbbbbbb.com", "tags" : [ "mongodb", "NoSQL" ], "likes" : 110})#替换成功后,我们可以通过 find() 命令来查看替换后的数据 db.col.find().pretty(){ "_id" : ObjectId("5b1529ed94a0f497f88cecbb"), "title" : "MongoDB", "description" : "MongoDB 是一个 Nosql 数据库", "by" : "lzssss", "url" : "http://www。bbbbbbbbbbbbb.com", "tags" : [ "mongodb", "NoSQL" ], "likes" : 110}>
3.删除文档 remove方法
语法:
db.collection.remove(
<query>, <justOne>)参数说明:query :(可选)删除的文档的条件。justOne : (可选)如果设为 true 或 1,则只删除一个文档。writeConcern :(可选)抛出异常的级别。eg:
#插入两次
db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: 'lzs', url: 'http://www.baidu.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100})#使用find函数查询db.col.insert({title: 'MongoDB 教程', description: 'MongoDB 是一个 Nosql 数据库', by: 'lzs', url: 'http://www.baidu.com', tags: ['mongodb', 'database', 'NoSQL'], likes: 100})#接下来我们移除 title 为 'MongoDB 教程' 的文档> db.col.remove({'title':'MongoDB 教程'})WriteResult({ "nRemoved" : 3 })> db.col.find()#如果你只想删除第一条找到的记录可以设置 justOne 为 1,如下所示:>db.COLLECTION_NAME.remove(DELETION_CRITERIA,1)#如果你想删除所有数据,可以使用以下方式(类似常规 SQL 的 truncate 命令):>db.col.remove({})>db.col.find()>4.查询操作
1.查询指定集合的所有数据:db.student.find() db.student.find().pretty()
2.根据指定条件查询集合
eg1:查询student集合中成绩大于80分的文档 db.student.find({score:{$gt:80}})
eg2:查询student集合中成绩大于80分且小于90的文档 db.student.find({score:{$gt:80,$lt:90}})
eg3:查询student集合中成绩小于60或大于90的文档 db.student.find({$or:[{score:{$lt:61}},{score:{$gt:90}}]})
注意:lt 小于 , gt 大于 , let 小于等于 ,lgt 大于等于
eg4:查询成绩等于83.5的文档 db.student.find({score:60})
eg5:对查询结果按照成绩升序排序 db.student.find().sort({score:1})
注意: sort方法里1代表升序;-1代表降序
eg6:查询名字中包含‘e’的文档 db.student.find({name:{$regex:'e'}})