MongoDB快速学习

  • A+
所属分类:安全博客
摘要

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


前言

这几天准备爬取某网站的一些评论数据,爬取代码都已写完,只剩下存储过程,思前想后还是考虑使用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快速学习

发表评论

:?: :razz: :sad: :evil: :!: :smile: :oops: :grin: :eek: :shock: :???: :cool: :lol: :mad: :twisted: :roll: :wink: :idea: :arrow: :neutral: :cry: :mrgreen: