mongoDB
mongoDB,nosql数据库,存储key-value格式的值,常用于对网页数据的存储,是爬虫数据存储的不二之选。
预备概念:
- 关系型数据库(RDBMS):有明确规定的字段,结构化数据的存储方式,是存储数据的最主要的数据库类型,常见的又orical,mysql
- 非关系型数据库(NoSQL):以key-vlalue,文档等!形式存储数据的存储方式,没有关系型数据库的结构性约束,存取容易,可存储数据类型丰富,像关系复杂,体量大,需要随用随取的数据,一般存储在非关系型数据库里。常见的非关系数据库有:redis,mongoDBD等
mongoDB的基本使用
1.mongoDB的启动
1.开启服务 sudo mongod
2.开启客户端 mongo
db.createUser({user:"bbb",pwd:"123456",roles:[{role:"read",db:"test"}]})
2.数据库的操作:
1. 查看所有的数据库 show dbs
2. 切换数据库 use xxx
3. 查看数据库的集合(表) show collections
4. 数据库的创建 有值自动创建
5. 删除数据库 1.进入当前数据库 2. db.dropDatabase()
3.集合(表)操作:
1. 查看集合 show collections
2. 创建集合 db.createCollection("xxx")
3. 删除集合 db.xx.drop()
4.文档(行)的增删改:
4.1.增加数据 db.xx.insert({key:value})
db.stu.insert({_id:1,name:"隔壁老万",age:88,gender:false})
data_dict = {
name:"小明",
age:12,
gender:false
}
db.stu.insert(data_dict)
db.stu.insert({_id:1,name:"王宝强",age:35,gender:false})
db.stu.insert({_id:2,name:"陈羽凡",age:28,gender:false})
db.stu.insert({_id:3,name:"贾乃亮",age:20,gender:false})
db.stu.insert({_id:4,name:"马蓉",age:16,gender:true})
db.stu.insert({_id:5,name:"白百何",age:18,gender:true})
db.stu.insert({_id:6,name:"李小璐",age:28,gender:true})
db.stu.insert({_id:7,name:"PGone",age:88,gender:true,like:"洗头发"})
4.2. 删除数据:db.xx.remove(删除的条件)
1.全部删除
db.stu.remove({})
2.根据条件删除: 默认是删除 所有符合条件的数据
db.stu.remove({age:28})
3. 只删除符合条件的第一个
db.stu.remove({gender:true},{justOne:true})
4.3.改 update: db.xx.update({查找的条件},{修改的内容})
1. 修改内容: 默认其他原有字段删除了,且只会修改满足条件的第一个document
db.stu.update({age:20},{name:"皮几万"})
db.stu.update({name:"白百何"},{like:"小鲜肉"})
2. 保持原有的字段 加一个修饰 $set: 默认 只修改第一个
db.stu.update({age:35},{$set:{like:"喝牛奶"}})
db.stu.update({name:"李小璐"},{$set:{age:10}})
db.stu.update({gender:false}, {$set:{age:66}})
3. 修改所有符合条件的数据 multi
db.stu.update({gender:true}, {$set:{name:"甜心"}},{multi:true})
4.4.save: 针对是 _id
db.stu.save({_id:7,name:"特朗普",age:"70",gender:false})
db.stu.save({_id:1,name:"马蓉"})
// db.stu.save({name:"皮几万"})
5.文档查询简单查询:
5.1.基本查询 db.xx.find({查询条件})
1.查询所有的数据
db.stu.find()
db.stu.find({})
2.默认查出 所有的符合条件的数据
db.stu.find({gender:true})
3.查找符合条件的第一个
db.stu.findOne({gender:true})
4. 格式化输出 pretty()
db.stu.find({age:28}).pretty()
5.2.条件运算符 $lt $gt $lte $gte $ne 数字对比
// 年龄 大于18岁的人
db.stu.find({age:{$gt:18}})
// 年龄 不等于18的
db.stu.find( {age: {$ne:18}})
5.3.逻辑运算 $and $or
1.$and 默认的查询条件就是 且的关系
db.stu.find({age:28,gender:false})
$and:
db.stu.find({
$and:[
{age:28},
{gender:true}
]
})
2. $or
// 年龄小于30或者 性别 男
db.stu.find({
$or:[
{age:{$lt:30}},
{gender:false}
]
})
3.混合使用 $and $or
// 年龄小于30必须性别 男, 或者年龄大于60
db.stu.find({
$or:[
{
$and:[
{age:{$lt:30}},
{gender:false}
]
},
{age:{$gt:60}}
]
})
4.范围运算: $in $nin
// 年龄范围在 16,18,88
db.stu.find({
age:{$in:[16,18,88]}
})
db.stu.find({
name:{$nin:["贾乃亮"]}
})
5.正则表达式:
1. /表达式/ 2.$regex:"表达式"
db.stu.find({
name:/凡/
})
db.stu.find({
name:{$regex:"凡"}
})
忽略大小写 i
db.stu.find({
name:/pgone/i
})
db.stu.find({
name:{$regex:"pgone",$options:"i"}
})
6.自定义函数 $where:带返回值的匿名函数
// 年龄大于18
db.stu.find({
$where:function () {
return this.age > 18
}
})
6.查询结果的显示:
6.1.skip:跳过几个查看
db.stu.find().skip(2)
6.2.limit:允许查看几个
db.stu.find().limit(2)
db.stu.find().skip(2).limit(2)
db.stu.find().limit(2).skip(2)
6.3. sort: 升序 和降序 字段 1升序 -1降序
// 年龄排序
db.stu.find().sort({age:1})
6.4.投影: 你显示哪些字段, 字段:1, 默认:0
db.stu.find({gender:true},{age:1,name:1})
6.5.去重: distinct(去重的字段,{查询条件})
db.stu.distinct("hometown", {age:{$lt:100}})
python中使用mongoDB
步骤:
-
- 链接数据库
-
- 创建数据库
-
- 创建集合
-
- 写入文件
-
- 关闭文件
试例:将.json数据存储到mongoDB中
# -*- coding:utf-8 -*-
import pymongo
import json
# 将.json数据存储到mongoDB数据库中
class PyMongo(object):
def __init__(self):
self.host = '127.0.0.1'
self.port = 27017
def __open_file(self):
self.file=open('./qiushibaike_data.json', 'r')
# 链接数据库
try:
self.client = pymongo.MongoClient(host=self.host, port=self.port)
except Exception, err:
print err
# 创建数据库
self.db = self.client['qiushibaike']
# 创建集合
self.collection = self.db['duanzi']
def main(self):
# 1.链接mongo数据库
self.__open_file()
# 2.读取json文件的数据
data_list = json.load(self.file)
# 3.写入数据
try:
self.collection.insert(data_list)
except Exception as err:
print err
# 4.关闭文件
self.file.close()
if __name__ == '__main__':
upload_to_mongoDB = PyMongo()
upload_to_mongoDB.main()
在robo 3T(一个mongoDB图形界面操作软件)中显示的结果:

本文介绍MongoDB的基础使用方法,包括数据库及集合的操作、文档的增删改查,以及使用Python进行数据导入。

1131

被折叠的 条评论
为什么被折叠?



