MongoDB 数据库:主要运用于爬虫。 MongoDB是一个基于分布式,文件数据存储的NoSQL 数据库。是由c++语言编写,所以说,运行稳定,性能高。MongoDB的特点:1,文档式存储,可以把不同结构文档存储在同一个数据库里。2.面向集合的存储,适合存储JSON风格文件的形式。3.完整的索引支持,任何属性都可当索引。4,高效的传统存储方式:支持二进制数据及大型对象(如图片或照片)
1.基本慨念:MongoDB将数据存储为一个文档,数据结构由键值(key=>value)对组成. MongoDB文档类似于JSON对象,字段可以包含其他文档,数组,文档数组.
下面是MySQL术语与MongoDB术语 MySQL术语/概念 MongoDB术语/概念 解释/说明 database database 数据库 table collection 数据库表| 集合 row document 数据记录行 | 文档 column field 数据字段 | 域 index index 索引 primary key primary key 主键,MongoDB自动将_ID设为主键 三元素: 数据库,集合,文档,. --集合就是关系数据库里的表,--文档对应着关系数据库的行. ---文档:就是一个对象,有键值对构成,{'name':'goujing','gender':'男'} 集合:类似于关系数据中的表,存储对个文档,结构不固定,如可以存储如下文档在一个集合中---{'name':'goujing','gender':'男'} {'name':'huangrong','age':'18'} {'name':'shuihuzhuan','hero':'108'} 数据库:是一个集合的物理容器,一个数据库包含多个文档,一个服务器通常有多个数据库...
2.常用命令 2.1. 数据库操作: 1.查看当前数据库名称:db 2.查看所有数据库名称:show dbs 3.切换数据库: 如果数据库不存在,则指向数据库,但不创建,直到插入数据或创建集合时数据库才被创建. use 数据库名称 --默认的数据库为text,如果你没有创建新的数据库,集合将存放在test数据库中.4.数据库删除:删除当前指向的数据库,如果数据库不存在,则什么都不做db.dropDatabase() 2.2.集合操作 1.集合创建: 语法:db.createCollection(name,options) 其中,name是指要创建的集合名称,options是一个文档,用于指定设置 集合 里配置的指定文档的数量限制 上限,及,大小.例如1:db.createCollection('student') 创建一个student的集合.2.查看当前数据库的集合:语法--show collections 3 .删除集合:语法--db.集合名称.drop() 2.3 数据操作: 1 常用的几种数据类型 : Object ID:文档ID String:字符串,最常用必须是有效的utf-8 Boolean:存储一个布尔值,true或false. Integer:整数可以是32位或者64位这取决于服务器.Double:存储浮点数.Arrays:数组或列表,多个值存储到一个键.Null:存储Null值.Object:用于嵌入式文档,即一个值为一个文档.Timestamp:时间戳 .Date:存储当前日期或时间的UNIX时间格式.. object id ---(1).每个文档都有一个属性,为_id,保证每个文档的唯一性 (2).可以自己去设置_id插入文档(3).如果没有提供,那么MongoDB为每个文档提供了一个独特的_id,类型为objectID.(4).objectID是一个12字节的十六进制数. 2. 数据插入 : 语法--- db.集合名称.insert(document) .插入文档时,如果不指定_id参数,MongoDB会为文档分配一个唯一的Objectid -->db.stu.insert({'name':'yj','gender':1}) 3.数据查询:语法----db.集合名称.find() 4.数据更新(修改):语法---db.集合名称.update({name:'hr'},{$set:{name:'hys'}}) 这是意思讲那么是hys更新name为hr. * 更新多条匹配到的数据:--->db.stu.update({},{$set:{gender:0}},{multi:true}) 5.数据保存 :语法--db.save(document) 6.数据删除:语法---db.集合名称.remove()
3.知识进阶 : <1> 数据查询 ----基本查询 1.find():查询 --db.集合名称.find({条件文档}) 2.findOne():查询,只返回第一个。--db.集合名称.findOne({条件文档}) 3.pretty():将结果格式化, --db.集合名称.find({条件文档}).pretty() <2>比较运算符 *等于,默认等于判断,没有运算符。*小于$lt. *大于或等于$lte *大于$gt *大于或等于$gte *不等于$ne .举例:查询年龄大于或者等于18的学生 db.stu.find({age:{$gte:18}}).. 查询名称等于tom的学生 db.stu.find({name:'tom'}) <3> 逻辑运算符,查询多个条件,它们之间需要逻辑运算符连接。 *逻辑与:默认时逻辑与的关系,举例:查询年龄大于或等于18,并且性别为1的学生 db.stu.find({age:{$gte:18},gender:1}) *逻辑或: $or 举例:查询年龄大于18,或者性别为0的学生 db.stu.find({$or({age:{$gt:18}},{gender:0}]}) *and和or 一起使用 举例: 查询年龄大于18或性别为0学生,并且学生姓名为jerry - db.stu.find({$or:[{age:{$gte:18}},{gender:0}],name:'jerry'}) <4>范围运算符:"$in", "$nin" 判断是否在某个范围内 , 举例 查询年龄为18 到22 之间的学生 db.stu.find({age:{$in:[18,22]}}) <5>支持正则表达式 :使用//或$regex编写正则表达式 举例:查询姓黄的学生 db.stu.find({name:/^黄/})<5> 投影 :在查询到的返回结果中,只选择必要的字段,而不是选择一个文档的整个字段,举例:一个文档由5个字段,需要显示只有3个,投影其中3个即可 --语法:参数为字段与值,值为1表示显示,值为0 表示不显示 --db,集合名称.find({},{字段名称:1,....}) <6> 排序:sort() 用于对结果进行排序 --db.集合名称.find().sort({字段:1,...}) ,参数1位升序排列,参数-1位降序排列, 举例: 根据性别降序排列,再根据年龄升序排列 db.stu().sort({gender:-1,age:1}) <7>统计 count() 语法:db.集合名称.find({条件}).count() 或者写成 db.集合名称.count({条件}) <8> 消除重复 distinct() 语法:db.集合名称.distinct('去重字段',{条件}) 举例:查找年龄大于18 的性别(去重) db.stu.distinct('gender',{age"{$gt:18}})
最后 .Mongodb与python交互 1,在cmd上安装 python包,pip install pymongo 2.在pycharm里 import pymongo 3.连接,创建客户端,client =pymongo.MongoClient("localhost",27017) 4.获得数据库test1 db.client[test1] 5.获得集合stu stu =db[stu] 6.添加(插入)文档 s1 ={name:'yj',age:18} ,s1_id =stu.insert_one(s1).inserted_id 7.查找一个文档 s2 =stu.find_one() ,,查找多个文档1 for cur in stu.find(): print cur ,,查找多个文档2 cur =stu.find() cur.next(), cur.next() *.获取文档个数 print stu.count()