zoukankan      html  css  js  c++  java
  • 爬虫基础知识(柒)

    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       路径

  • 相关阅读:
    Java 字符串判空
    JavaScript try catch 常用场景(一)
    IE console 未定义
    共享锁与排它锁
    js 原型链
    js的原型模式
    js中RegExp类型
    js中Array对象方法详解
    js动态生成input指定My97DatePicker时间问题
    利用spring、cxf编写并发布webservice
  • 原文地址:https://www.cnblogs.com/lavender1221/p/12343022.html
Copyright © 2011-2022 走看看