爬虫基础知识(柒)

Mongodb数据库

    一、MongoDB简介:

                    爬虫基础知识(柒)

        1、Mongodb:文档数据库,存储的是文档(Bson→json的二进制化),json数据存储的就是js中对象和数组。

        2、MongoDB特点:内部执行引擎为JS解释器,把文档储存成bson结构,在查询时转换为JS对象,并可以通过熟悉的js语法来操作。

        3、Mongo和传统型数据库的不同:

          • 传统型数据库:结构化数据,定好了表结构后,每一行的内容必是符合表结构的,就是说一列的数据,类型都一样。
          • mongo文档型数据库:集中存储的每篇文档,都可以有自己独特的结构(json对象都可以有自己独特的属性和值)。
          • mongo数据库的collection不用提前创建(可以隐式创建)

        4、mongodb数据库bin目录下的文件意义:

          爬虫基础知识(柒)

        5、mongo入门命令:

             爬虫基础知识(柒)

       6、如何创建库:

        MongoDB的库是隐式创建,你可以use一个不存在的库,然后在该库下创建collection,即可创建库

use dbname ---ues一个不存在的库
db.createCollection(‘collectionName’) ---在该库下面创建集合,就可以创建一个数据库

        其实在MongoDB中,collection也是可以隐式创建的。

db.collectionName.insert(document)

        如何删除数据库和集合?

db.collectionName.drop()//删除集合
db.dropDatabase()//删除数据库

    二、MongoDB的操作

       1、增:insert方法

          首先要明确一点,MongoDB存储的是文档,文档其实就是json格式的对象。

          语法:

            db.collectionName.insert(document)

          增加单篇文档:

            db.collectionName.insert({title:‘nice day‘})

          增加单个文档并指定id:

            db.collectionName.insert({_id:8,age:78})

          增加多个文档:

            db.collectionName.insert([{time:‘friday‘,study:‘mongodb‘},{_id:9,gender:‘male‘,name:‘QQ‘}])

       2、查:find方法

          语法:

            db.collection.find(查询表达式,查询的列);

            db.collection.find(表达式,{列1:1,列2:1});

            在查询列的参数中,1表示显示,0表示不显示(_id属性默认是显示的)。

          常用方法:

            ·limit():

              db.collection.find().limit(number);

            ·skip():

              db.collection.find().skip(number);

            ·sort():

              db.collection.find().sort({KEY:1});

            ·count():

              db.collection.find().count();

       3、查询表达式

          ·   :   等于

            db.collection.find({key:value},{_id:0});

          · $lt   小于

            db.collection.find({key:{$lt:value}},{key:1});

          · $lte  小于等于

          · $gt   大于

          · $gte  大于等于

          · $ne   不等于

            db.collection.find({key:{$ne:value}},{key:1})

          · $in   存在其中一个或多个值

            db.collection.find({key:{$in:[value1,value2]}},{key:1})

          · $nin  不存在数组中的值

          · $all  数组中的值全存在

            db.collection.find({key:{$all:[value1,value2]}},{key:1})

          · $exists 含有字段

            db.collection.find({key:{$exists:1}},{key:1})

          · $nor  所有条件都不满足

            db.collection.find({$nor:[key1:value1,key2:value2]},{_id:0})

          · $and  所有条件都满足

            db.collection.find({$and:[key1:value1,key2:value2]},{_id:0})

          · $or   条件至少满足一个

            db.collection.find({$or:[key1:value1,key2:value2]},{_id:0})

        4、删:remove方法

          db.collection.remove(查询表达式,选项)

          选项是指{justOne:true/false},是否只删除一行,默认为false

          如果不写查询表达式,collection中的所有数据都将被删掉。

        5、改:update方法

          db.collection.update(查询表达式,新值,选项)

          修改时的赋值表达式:

            · $set  修改某列的值

            · $unset  删除某个列

            · $rename 重命名某个列

            · $inc  增长某个列

          选项参数:

            · upsert  指没有匹配的行,则直接插入该行,值为true或false

            · multi   指修改多行,默认为false,如果想修改多行,则设为true

       6、聚合函数

          聚合主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。

          db.collection.aggregate([{管道1},{管道2},{管道3}...])

          mongodb的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理,管道操作是可以重复的。

          聚合框架中的常用管道操作:

            · $project : 修改输入文档的结构。可以用来重命名、增加或删除域,也可以用于创建计算结果以及嵌套文档。

            · $match   : 用来过滤数据,只输出符合条件的文档。$match使用MongoDB的标准查询操作。

            · $limit   : 用来限制MongoDB聚合管道返回的文档数。

            · $skip    : 在聚合管道中跳过指定数量的文档,并返回余下的文档。

            · $group   : 将集合中的文档分组,可用于统计结果。

            · $sort    : 将文档排序后输出。

          group中的操作表达式:

            爬虫基础知识(柒)

    三、游标操作

       1、游标的概念及作用:

        mongo的游标相当于python中的迭代器。通过将查询结构定义给一个变量,这个变量就是游标。通过这个游标,可以每次获取一个数据。

      2、游标的声明:

        var cursor=db.bar.find()

      3、游标的操作:

        cursor.hasNext()    判断游标是否还有下个数据

        cursor.next()    取出游标的下一个单元

      4、cursor.forEach(回调函数):

        var gettile = function(obj){print(obj.goods_name)}

        var cursor=db.goods.find()

        cursor.forEach(gettile)

      5、游标在分页中的应用:

        在MongoDB中,用skip和limit方法实现

        例:var cursor=db.bar.find().skip(90).limit(20)

    四、索引创建

      优化查询的首要考虑的就是索引。

        ·索引提高查询速度,降低写入速度

        ·在MongoDB中,索引可以按字段升序/降序来创建,便于排序

        ·默认是用btree来组织索引文件,在2.4版本后,也允许建立hash索引。

      常用命令:

        (1)查看当前索引状态:db.collection.getIndexes()

        (2)创建普通单列索引:db.collection.ensureIndex({field:1/-1})//1为正序,-1为逆序

        (3)删除单个索引:db.collection.dropIndex({field:1/-1})

        (4)删除所有索引:db.collection.dropIndexes()

        (5)创建多列索引:db.collection.ensureIndex({field1:1/-1,field2:1/-1})

        (6)哈希索引:db.collection.ensureIndex({field:‘hashed‘})

        (7)唯一索引:db.collection.ensureIndex({field:1/-1},{unique:true})

    五、MongoDB数据的导入导出

       1、通用选项:

          --host      主机

          --port      端口号

          -u        用户名

          -p        密码

       2、mongoexport导出(json格式或CSV格式):

          -d        库名

          -c        表名

          -f        列名

          -q        查询条件

          -o        导出至地址及文件名

          --type csv        导出CSV格式(便于二和传统数据库交换数据)

       3、mongoimport导入:

          -d        待导入的数据库

          -c        待导入的表(不存在的话会自己创建)

          --file      备份文件路径

       4、mongodump导出二进制bson结构的数据及其索引信息:

          -d        库名

          -c        表名

        规律:

          导出的文件放在database命名的目录下

          每个表导出两个文件,分别是bson结构的文件和json的索引信息

          若不声明表名,导出所有的表

       5、mongorestore导入二进制文件:

          -d        库名

          -c        表名

          --dir       路径

相关推荐