Python技术迷

Python 操作 MongoDB 看这一篇就够了!

哎我先说一句哈…我这人刚从楼下便利店拎着咖啡上来,人有点迷糊,你们就…将就听我叨叨两句。刚电梯口遇到我们组小李,他非要问我 MongoDB 聚合怎么写,我说你别急我这咖啡还没喝一口你就给我上难题…结果一路聊上来,我就想着干脆把我平时用 Python 搞 MongoDB 的那点玩意儿和盘托出了,就现在这样边说边打字…

嗯…那个…要不我先随便讲讲咋连上去,反正这事儿每天都要干。昨天晚上十一点多我在公司写脚本,手有点抖还敲错 host,结果连半天连不上,我还以为集群挂了。

from pymongo import MongoClient

client = MongoClient("mongodb://localhost:27017")
db = client["demo_db"]
collection = db["users"]

就这种,没啥玄学,就是别像我一样 host 写成 locahost…找了半小时。你们别笑。

我刚才喝了口咖啡继续说哈…那个增删改查嘛,MongoDB 这玩意儿用起来比关系型轻松点,想存啥存啥,我每次说这个就想到上周在地铁上给朋友远程 debug,他那边 JSON 字段乱七八糟的都塞进去了还觉得挺正常。

插数据就这样:

collection.insert_one({"name": "dongge", "age": 18})

我知道你要吐槽啥,嗯,我也不 18 我知道…别打断我…

昨天我看我们组那小李写更新,写了一坨 $set 外面又包一层 dict,包成套娃了,还怪 Mongo 不更新。我说你这像我早上买咖啡把杯套套在杯套外面的杯套一样…哪里对劲。

collection.update_one({"name": "dongge"}, {"$set": {"age": 28}})

查嘛查就是这么查,我一般偷懒直接转 list,因为我脑子不太能记住游标状态,尤其凌晨两点的时候:

result = list(collection.find({"age": {"$gte": 18}}))

我稍微停一下…刚我们 QA 在旁边问我啥是 $gte,我说大于等于,你别让我解释英文,我昨天熬夜现在头疼。

哦对了,有个事儿一定得提,上周我在公司楼下抽烟的时候突然想起来我们项目统计活跃用户的时候,用 Mongo 的索引忘建了,线上查询直接把 CPU 打爆。Mongo 不建索引你查啥都慢得要死,千万别学我。

collection.create_index("age")

我当时就是忘了加这个,线上报警响得跟消防演习一样,我被叫醒的时候整个人都懵的。

对了对了…聚合,刚小李问的那个,我脑子刚才在想吃啥所以没说清楚,现在补一句,不然你们以为我不会写:

pipeline = [
    {"$match": {"age": {"$gte": 18}}},
    {"$group": {"_id": "$age", "count": {"$sum": 1}}}
]

res = list(collection.aggregate(pipeline))

就这样,我第一次写这个的时候把 "$age" 写成 "age",然后还纳闷为啥 _id 全是 None…你们千万别笑,写久了都一样。

等等我手机震了一下……啊没事广告推送…继续继续…

其实 Python 操作 MongoDB 这事儿吧,说难也不难,你把 pymongo 那几个函数摸个三五天就能像我一样边喝咖啡边写。就是别半夜写,我半夜写每次都写错 connection…

行了我差不多要去开会了,你看我这说得乱七八糟你要是还能看懂那你是真的缘分到了……等会儿我好像还没把咖啡喝完,算了我先走了会儿里喝。

-END-

我为大家打造了一份RPA教程,完全免费:songshuhezi.com/rpa.html

🔥虎哥私藏精品🔥

虎哥作为一名老码农,整理了全网最全《python高级架构师资料合集》,总量高达650GB