MongoDB系列2-基本操作
介绍MongoDB
的基本操作,包含以下几个方面,在爬虫中使用最多的是往MOngoDB
中插入数据
- 增:insert()
- 查:find()
- 逻辑查询
- 结果排序-sort
- 更新-update
- 删除-delete
- 去重-distinct
增加
插入操作使用的是insert,参数是Python的字典类型数据
代码语言:javascript复制from pymongo import MongoClient
client = MongoClient()
database = client["Chapter6"] # Chapter6集合名字
collection = db1["spider"] # spider库的名字
# 单条插入
data = {"id":123,"name":"xiaoming","age":20}
collection.insert(data) # 插入数据
# 批量插入
more_data = [{"id":123,"name":"xiaoming","age":20,"salary":2000},
{"id":124,"name":"yangming","age":22,"salary":2400},
{"id":125,"name":"zhaofeng","age":28,"salary":2600}
] # 数据放入列表中
collectino.insert(more_data)
爬虫中主要用MongoDB来存储数据,用的就是insert方法
查找-find
查找数据使用的方法是find
find(查询条件,返回字段) # 多条信息
find_one(查询条件,返回字段) # 只返回一条信息
参数都是字典类型,可以省略;爬虫中用的多的是find()
方法,例如:
# 情形1
content = collection.find() # 返回的是全部内容
content = collection.find({'age':20}, # 查询age=20的人
{'_id':0,'name':1,"salary":1} # 限定返回的字段信息:0表示不返回,1表示返回
)
- 第二个参数指定返回的内容:0表示不返回,1表示返回
_id
必须人工指定其值0,才不会返回;其他数据统一返回,或者统一不返回find()
方法返回的是可迭代的PyMongo
对象,可以被for循环展开,展开得到字典,字典对应的是每条记录
content = [x for x in collection.find({'age':20},{'_id':0,'name':1,"salary":1})]
逻辑查询
PyMongo
也支持大于、小于、大于等于等逻辑查询,见表格:
使用方法:
- 指定字段
- 指定查询范围,范围也是字典的形式
collection.find({'age':{'$gt':29}})
collection.find({'age':{'$gte':29},'$lte':40})
结果排序-sort
将结果查询find
出来之后可以通过sort
方法进行排序,两个参数:
- 指定的字段
- -1表示降序,1表示升序
collection.find().sort('列名',1或-1)
使用的案例:
代码语言:javascript复制collection.find({'age':{'$gte':29,'$lte':40}}).sort('age',-1) # 先查询,再降序排列
更新-udpate
更新数据的两个方法:
代码语言:javascript复制collection.update_one(参数1,参数2) # 更新一条
collection.update_many(参数1,参数2) # 更新多条
两个参数都是字典,且都不能省略
两个参数都是字典,且都不能省略
两个参数都是字典,且都不能省略
使用的案列如下:
代码语言:javascript复制collection.update_one({'age':20}, # 将第一个年龄为20的人的名字改为xiaoming
{'$set':{'name':'xiaoming'}}
)
collection.update_many({'age':20}, # 将全部年龄为20的人的名字改为xiaoming
{'$set':{'name':'xiaoming'}}
)
删除-delete
删除数据的两种方法:
- delete_one():删除一条
- delete_many():删除多条
参数都是字典,不建议省略
代码语言:javascript复制collection.delete_one({'age':20}) # 删除一条
collection.delete_many({'age':20}) # 删除多条
结果去重-distinct
去重使用的是distinct()
方法
collection.distinct('字段名称')