博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python+mongodb简单操作记录
阅读量:5936 次
发布时间:2019-06-19

本文共 1877 字,大约阅读时间需要 6 分钟。

最近写爬虫用到的是mongodb数据库,部署在阿里云的服务器,下面简单记录一下用到的操作,已被后用。(关于mongodb的安装配置参考其他资料,后续补充)

基本操作:

def find_data():    print("init mongo")    client = MongoClient(ip)    db = client[database]    db.authenticate(user, pwd)    c = db[collection]    # c.create_index("movieid", unique=True)    #  其余操作      client.close()复制代码

插入:

可以使用insert_one或者insert_many插入多条数据,但是我插入的数据经常会有重复,因此想到两种解决方法。 以豆瓣电影的一条记录来说:

首先建立唯一索引:
c.create_index("movieid", unique=True)

  1. 利用try catch来保证唯一插入,try catch也可用于其他异常处理
try:   insert_one   #说明有相同记录except e:   print(e)复制代码
  1. upsert命令:
collection.update_one({
"movieid": movieid}, {
"$set": item}, upsert=True)复制代码

上述用于更新一条记录,不存在则插入。{"$set": item}, 全部更新,也可选择部分更新。

查找find操作

  1. results = c.find().count()用于记录,find中可以加条件。
mark = "wish_count"results = c.find({
"subtype": "tv", mark: {
"$gte": 10000, "$lte": 30000}}, {
"_id": 0, "title": 1, "rate": 1, mark: 1}).sort([("rate", -1), (mark, -1)])复制代码

这条语句的意思是;根据subtype=“tv”mark10000~30000之间进行查找,结果中不显示_id 字段(find的第二个参数,0不显示,1显示), 显示titlerate字段。 结果按照rate, mark的顺序降序排列(1为升序)。

  1. results = c.find({"title": {"$regex": "大明"}}) 类似like操作,查找title包含大明的集合。

  2. results = c.find({"casts": {"$in": ["1", "2"]}}) 查找集合中演员列表存在1, 2字段的集合。

组合操作:

pipeline = [        {
"$match": {
"subtype": "tv"}}, {
"$unwind": "$casts"}, {
"$group": {
"_id": "$casts", "count": {
"$sum": 1}, "avg": {
"$avg": "$rate"}}}, {
"$sort": {
"avg": -1}}, # {"$match": {"count": {"$gte": 3, "$lte": 4}}} {
"$match": {
"_id": "鹿晗"}} ] results = c.aggregate(pipeline)复制代码

组合操作: 第一个matchfind的第一个参数一样,用于组合前筛选。 unwind:展开,用于该字段是列表时,展开进行组合操作,不是列表可省略。 group_id是必须字段,countavg自定义字段, sumavg分别是求和,求平均操作。 sort关键字不在叙述。 后面match用于组合后筛选, gte是大于等于,lte是小于等于字段。

综上:这条操作的意思是: 对subtype=“tv”的集合进行操作,展开casts字段,对其进行组合,计算出现次数count, 对集合的rate求平均值。结果按照平均值排序,并筛选出count在3~4之间的集合(_id=“鹿晗”)

后续用到再补充,具体其他操作请查看官方文档。

转载地址:http://snjtx.baihongyu.com/

你可能感兴趣的文章
Centos下基于Hadoop安装Spark(分布式)
查看>>
POJ2348 UVa10368 HDU1525 Euclid's Game【博弈】
查看>>
Java 位运算
查看>>
好用的CSS模块化打包工具CSS-COMBO
查看>>
python 中的字符和字符串
查看>>
C#Winform限制Textbox只能输入数字
查看>>
USACO 3.1.4 [Shaping Regions]
查看>>
jenkins集成ansible注意事项Failed to connect to the host via ssh.
查看>>
EL表达式经典用法
查看>>
java.lang.NoClassDefFoundError: javax/mail/Authenticator
查看>>
04-maven学习-pom.xml解析
查看>>
js 自定义事件 包含 添加、激活、销毁
查看>>
PowerDesigner逆向生成MYSQL数据库表结构总结
查看>>
匈牙利公开赛给国乒提醒 周雨违规被取消资格
查看>>
前端性能优化之http请求的过程
查看>>
这么说吧,Lucene很简单,其实就是个框架,用于全文检索用的
查看>>
【数据结构_浙江大学MOOC】第三四五讲 树
查看>>
Redis随笔-rename效率问题
查看>>
【推荐】jquery开发的大型web应用—H5编辑器工具
查看>>
[译] 设计一个现代的缓存
查看>>