MongoDB快速学习

前言

这几天准备爬取某网站的一些评论数据,爬取代码都已写完,只剩下存储过程,思前想后还是考虑使用mongdb,毕竟比较适合这种非结构化的数据,以前作过一些了解,不过都基本忘完了,今天正好上官网跟着教程走一遍,记录一下。

创建与删除操作

1.创建数据库

语法

MongoDB 创建数据库的语法格式如下:

use DATABASE_NAME

如果数据库不存在,则创建数据库,否则切换到指定数据库。

实例

以下实例我们创建了数据库 mongo:

> use mongo  
switched to db mongo  
> db 
mongo 
>   

如果你想查看所有数据库,可以使用 show dbs 命令:

> show dbs  
local  0.078GB  
test   0.078GB  
>  

可以看到,我们刚创建的数据库 mongo 并不在数据库的列表中, 要显示它,我们需要向 mongo 数据库插入一些数据。

> db.mongo.insert({"name":"http://www.happyhong.cn/"})
WriteResult({ "nInserted" : 1 })  
> show dbs  
local   0.078GB  
mongo  0.078GB 
test    0.078GB  
>   

MongoDB 中默认的数据库为 test,如果你没有创建新的数据库,集合将存放在 test 数据库中。

2.删除数据库

语法

MongoDB 删除数据库的语法格式如下:

db.dropDatabase()

删除当前数据库,默认为 test,你可以使用 db 命令查看当前数据库名。

实例

以下实例我们删除了数据库 mongo。

首先,查看所有数据库:

> show dbs  
local   0.078GB  
mongo   0.078GB  
test    0.078GB

接下来我们切换到数据库 mongo:

> use mongo  
switched to db mongo 
> 
> db.dropDatabase()  
> { "dropped" : "mongo ", "ok" : 1 }

最后,我们再通过 show dbs 命令数据库是否删除成功:

> show dbs  
local  0.078GB  
test   0.078GB  
> 

3.集合

集合删除语法格式如下:

  db.collection.drop()  

增删改查

1.增

这里我们将一条数据插入到moongodb中,mongdb数据结构与json差不多。
可以使用insert、insert_one、insert_many方法来插入文档。
具体使用方法:

db.COLLECTION_NAME.insert(document)  
  • db:mongdb数据库对象
  • COLLECTION_NAME:集合名字
  • document:插入的数据
    例如:
    插入一条评论数据:
>db.douban.insert({
    "用户名": '八级大狂风',
    "用户空间链接": 'www.xxxxxxx.com/31313143/',
    "评分": '推荐', 
    "评论内容": '真好看啊', 
    "评论时间": '2020-03-20',
})
>db.douban.insert_one({
    "用户名": '八级大狂风',
    "用户空间链接": 'www.xxxxxxx.com/31313143/',
    "评分": '推荐', 
    "评论内容": '真好看啊', 
    "评论时间": '2020-03-20',
})

以上实例中 douban是集合名,如果该集合不在该数据库中, MongoDB 会自动创建该集合并插入文档。

查看已插入文档:
> db.douban.find()  
{ 
    "_id" : ObjectId("1324886ade2f21f36b0565"),
    "用户名": '八级大狂风',
    "用户空间链接": 'www.xxxxxxx.com/31313143/',
    "评分": '推荐', 
    "评论内容": '真好看啊', 
    "评论时间": '2020-03-20',
}
>   
插入多条评论数据:
>db.douban.insert([{
    "用户名": '八级大狂风',
    "用户空间链接": 'www.xxxxxxx.com/31313143/',
    "评分": '推荐', 
    "评论内容": '真好看啊', 
    "评论时间": '2020-03-20',
},
    "用户名": '小二郎',
    "用户空间链接": 'www.xxxxxxx.com/32324443/',
    "评分": '一般', 
    "评论内容": '不好看', 
    "评论时间": '2020-03-20',
}
])
>db.douban.insert_many([{
    "用户名": '八级大狂风',
    "用户空间链接": 'www.xxxxxxx.com/31313143/',
    "评分": '推荐', 
    "评论内容": '真好看啊', 
    "评论时间": '2020-03-20',
},
    "用户名": '小二郎',
    "用户空间链接": 'www.xxxxxxx.com/32324443/',
    "评分": '一般', 
    "评论内容": '不好看', 
    "评论时间": '2020-03-20',
}
])
insert()总结:

插入文档你也可以使用 db.col.save(document) 命令。如果不指定 _id 字段 save() 方法类似于 insert() 方法。如果指定 _id 字段,则会更新该 _id 的数据。

2.删

MongoDB remove()函数是用来移除集合中的数据。

在执行remove()函数前先执行find()命令来判断执行的条件是否正确,这是一个比较好的习惯。

语法

remove() 方法的基本语法格式如下所示:

db.collection.remove( 
    <query>,     
    <justOne> 
)  

如果你的 MongoDB 是 2.6 版本以后的,语法格式如下:

db.collection.remove(     
    <query>,     
    {       
        justOne: <boolean>,
        writeConcern: <document> 
    } 
)
参数说明:
  • query :(可选)删除的文档的条件。
  • justOne : (可选)如果设为 true 或 1,则只删除一个文档。
  • writeConcern :(可选)抛出异常的级别。

接下来我们移除 用户名为八级大狂风的文档,同样的养成习惯,在删除前进行find操作:

> db.douban.find()  
{ 
    "_id" : ObjectId("1324886ade2f21f36b0565"),
    "用户名": '八级大狂风',
    "用户空间链接": 'www.xxxxxxx.com/31313143/',
    "评分": '推荐', 
    "评论内容": '真好看啊', 
    "评论时间": '2020-03-20',
},{    
    "_id" : ObjectId("1324886ade2f21f36c1234"),
    "用户名": '小二郎',
    "用户空间链接": 'www.xxxxxxx.com/32324443/',
    "评分": '一般', 
    "评论内容": '不好看', 
    "评论时间": '2020-03-20',
},

删除文档:

>db.douban.remove({"用户名": '八级大狂风'})
WriteResult({ "nRemoved" :1 })        
>db.douban.find()
>{
    "_id" : ObjectId("1324886ade2f21f36c1234"),
    "用户名": '小二郎',
    "用户空间链接": 'www.xxxxxxx.com/32324443/',
    "评分": '一般', 
    "评论内容": '不好看', 
    "评论时间": '2020-03-20',
}

可以看见删除成功!

3.改

MongoDB 使用 update() 和 save() 方法来更新集合中的文档。接下来让我们详细来看下两个函数的应用及其区别。

update() 方法

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

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 :可选,抛出异常的级别。
    例如:
>db.douban.update({"用户名": '小二郎'},{$set:{"用户名": '王小二'}})
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })   # 输出信息  
> db.douban.find().pretty()
{
    "_id" : ObjectId("1324886ade2f21f36c1234"),
    "用户名": '王小二',
    "用户空间链接": 'www.xxxxxxx.com/32324443/',
    "评分": '一般', 
    "评论内容": '不好看', 
    "评论时间": '2020-03-20',
}

以上语句只会修改第一条发现的文档,如果你要修改多条相同的文档,则需要设置 multi 参数为 true。

>db.douban.update({"用户名": '王小二'},{$set:{"用户名": '王二小'}},{multi:true})
save() 方法

save() 方法通过传入的文档来替换已有文档。语法格式如下:

db.collection.save(    
    <document>,     
    {      
        writeConcern: <document> 
    }  
)  

参数说明:

  • document : 文档数据。
  • writeConcern :可选,抛出异常的级别。
实例
>db.doouban.save({ 
    "_id" : ObjectId("1324886ade2f21f36c1234"),
    "用户名": '小小',
    "用户空间链接": 'www.xxxxxxx.com/32324443/',
    "评分": '推荐', 
    "评论内容": '好看', 
    "评论时间": '2020-03-20',
    })
>db.doouban.find().pretty()
    {
    "_id" : ObjectId("1324886ade2f21f36c1234"),
    "用户名": '小小',
    "用户空间链接": 'www.xxxxxxx.com/32324443/',
    "评分": '推荐', 
    "评论内容": '好看', 
    "评论时间": '2020-03-20',
    }

可以看到已经修改成功。

注意save的用法
1.不带_id参数进行save
>db.doouban.save({ 
    "用户名": '小小',
    "用户空间链接": 'www.xxxxxxx.com/32324443/',
    "评分": '推荐', 
    "评论内容": '好看', 
    "评论时间": '2020-03-20',
    })
>db.doouban.find().pretty()
    {
    "_id" : ObjectId("10691737d386d8fadbd6b01d""),
    "用户名": '小小',
    "用户空间链接": 'www.xxxxxxx.com/32324443/',
    "评分": '推荐', 
    "评论内容": '好看', 
    "评论时间": '2020-03-20',
    }

可以看到不带_id,则生成一个新的文档。

2.带_id参数,但是找不到一个已经存在的文档
>db.doouban.save({ 
    "_id" :100,
    "用户名": '小小',
    "用户空间链接": 'www.xxxxxxx.com/32324443/',
    "评分": '推荐', 
    "评论内容": '好看', 
    "评论时间": '2020-03-20',
    })
>db.doouban.find().pretty()
    {
    "_id" : 100,
    "用户名": '小小',
    "用户空间链接": 'www.xxxxxxx.com/32324443/',
    "评分": '推荐', 
    "评论内容": '好看', 
    "评论时间": '2020-03-20',
    }

依然重新生成一个新文档。

save()总结

若新增数据的主键已经存在,则会对当前已经存在的数据进行修改操作,如果不带主键则会生成新文档,所以如果要准确修改请带上主键_id。

结束

更多内容请关注从今天开始种树
关注知识图谱与大数据公众号,获取更多内容。
在这里插入图片描述


   转载规则


《MongoDB快速学习》 罗华 采用 知识共享署名 4.0 国际许可协议 进行许可。
 上一篇
爬虫学习(3):搭建自己的电影资源网(保姆式教学) 爬虫学习(3):搭建自己的电影资源网(保姆式教学)
提醒: 本文所涉及的资源均采集自互联网,只作为学习使用,切勿用于盈利,支持正版,如有侵权,即刻删除。由于过长的篇幅影响观感,文中完整代码和涉及到的url可在从今天开始种树个人博客中查看,同时建议采集过程不要影响网站正常运行,完整代码拉至最
下一篇 
10分钟快速安装Redis 10分钟快速安装Redis
获取redis资源wget http://download.redis.io/releases/redis-4.0.8.tar.gz 解压tar xzvf redis-4.0.8.tar.gz 编译安装  cd redis-4.0.8   
2020-06-01
  目录