MongoDB基础

一: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
> db
runoob
>     
        2.查看所有的数据库 show bds
 
> show dbs
local  0.078GB
test   0.078GB
>
        
        3.删除当前数据库   语法: db.dropDatebase()  
 
db.dropDatabase()   #删除当前数据库,默认是删除test数据库
#查看所有数据库
> show dbs   
admin   (empty) 
local   0.078GB
runoob  0.078GB
#进入runoob数据库
> use runoob
switched to db runoob
#删除当前数据库
> db.dropDatabase()
{ "dropped" : "runoob", "ok" : 1 }
#检查是否删除成功
> show dbs
admin  (empty)
local  0.078GB

2.集合操作
        
        1.创建一个集合 db.createCollection(“集合名称”,[options])
            参数说明:name:要创建的集合名称    options:可选参数,指定有关内存大小及索引的选项
             
MongoDB基础
            注意:如果直接向一个集合插入数据文档,则会自动创建该集合,若你在创建集合时没有进入数据库,则会使用默认数据库‘test’
       2.显示当前库中所有的集合 show collections
eg:
 
> db.runoob.insert({'name':'菜鸟'})
WriteResult({ "nInserted" : 1 })
> show dbs
admin   (empty)
local   0.078GB
runoob  0.078GB
#创建test数据库
> use test
switched to db test
#创建‘runoob’数据库
> db.createCollection('runoob')
{ "ok" : 1 }
#查看runoob数据库中的集合;
> show collections
runoob
system.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 collections
mycol
mycol2
runoob
system.indexes
> 
       3.删除集合     使用drop方法
 
#语法格式:
db.collection.drop()
eg:
 
#进入test数据库
> use test
switched to db test
#查看数据库中的集合
> show collections
mycol
mycol2
runoob
system.indexes
#删除mycol2集合
> db.mycol2.drop()
true
#查看删除后的集合列表
> show collections
mycol
runoob
system.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'}})