当前位置:首页 » 《随便一记》 » 正文

python操作MongoDB(插、查、改、排、删)

15 人参与  2022年10月16日 08:09  分类 : 《随便一记》  评论

点击全文阅读


??????????????? 

? 博客首页:knighthood2001

? 欢迎点赞?评论?️

❤️ 热爱python,期待与大家一同进步成长!!❤️

?给大家推荐一款很火爆的刷题、面试求职网站?

跟我一起来巩固基础、开启刷题之旅吧

MongoDB 是一个基于分布式文件存储的数据库。是一个介于关系数据库和非关系数据库之间的产品,是非关系数据库当中功能最丰富,最像关系数据库的。

MongoDB 是目前最流行的 NoSQL 数据库之一,使用的数据类型 BSON(类似 JSON)。

目录

插入文档

插入集合

返回 _id 字段

插入多个文档

插入指定 _id 的多个文档

查询文档

查询一条数据

查询集合中所有数据

查询指定字段的数据

根据指定条件查询

高级查询

返回指定条数记录

修改文档

排序

删除数据

删除多个文档

删除集合中的所有文档

删除集合


首先需要安装MongoDB,安装过程就不详细赘述了??

然后Python 要连接 MongoDB 需要 MongoDB 驱动,用pip安装

pip install pymongo

以下内容均来自牛客网(一个对新手非常友好的网站,里面内容多,包含刷题、面试等资料) 笔者略作更改,希望能帮助到大家!!


插入文档

        MongoDB 中的一个文档类似 SQL 表中的一条记录。

插入集合

        集合中插入文档使用 insert_one() 方法,该方法的第一参数是字典 name => value 对。

例:向 sites 集合中插入文档

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]mydict = { "name": "NOWCODER", "alexa": "10000", "url": "https://www.nowcoder.com" }x = mycol.insert_one(mydict) print(x)print(x)

结果如下:

<pymongo.results.InsertOneResult object at 0x10a34b288>

返回 _id 字段

        insert_one() 方法返回 InsertOneResult 对象,该对象包含 inserted_id 属性,它是插入文档的 id 值。

import pymongomyclient = pymongo.MongoClient('mongodb://localhost:27017/')mydb = myclient['nowcoderdb']mycol = mydb["sites"]mydict = { "name": "Google", "alexa": "1", "url": "https://www.google.com" }x = mycol.insert_one(mydict)print(x.inserted_id)

结果如下: 

5b2369cac315325f3698a1cf

插入多个文档

        集合中插入多个文档使用 insert_many() 方法,该方法的第一参数是字典列表。

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]mylist = [  { "name": "Taobao", "alexa": "100", "url": "https://www.taobao.com" },  { "name": "QQ", "alexa": "101", "url": "https://www.qq.com" },  { "name": "Facebook", "alexa": "10", "url": "https://www.facebook.com" },  { "name": "知乎", "alexa": "103", "url": "https://www.zhihu.com" },  { "name": "Github", "alexa": "109", "url": "https://www.github.com" }]x = mycol.insert_many(mylist)# 输出插入的所有文档对应的 _id 值print(x.inserted_ids)

输出结果类似如下:

[ObjectId('5b236aa9c315325f5236bbb6'), ObjectId('5b236aa9c315325f5236bbb7'), ObjectId('5b236aa9c315325f5236bbb8'), ObjectId('5b236aa9c315325f5236bbb9'), ObjectId('5b236aa9c315325f5236bbba')]

插入指定 _id 的多个文档

        我们也可以自己指定 id,插入,以下实例我们在 site2 集合中插入数据,_id 为我们指定的:

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["site2"]mylist = [  { "_id": 1, "name": "NOWCODER", "cn_name": "牛客教程"},  { "_id": 2, "name": "Google", "address": "Google 搜索"},  { "_id": 3, "name": "Facebook", "address": "脸书"},  { "_id": 4, "name": "Taobao", "address": "淘宝"},  { "_id": 5, "name": "Zhihu", "address": "知乎"}]x = mycol.insert_many(mylist)# 输出插入的所有文档对应的 _id 值print(x.inserted_ids)

结果如下:

[1, 2, 3, 4, 5]

查询文档

        MongoDB 中使用了 find find_one 方法来查询集合中的数据,它类似于 SQL 中的 SELECT 语句。

查询一条数据

        我们可以使用 find_one() 方法来查询集合中的一条数据。

例:查询 sites 文档中的第一条数据

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]x = mycol.find_one()print(x)

结果如下:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'NOWCODER', 'alexa': '10000', 'url': 'https://www.nowcoder.com'}

查询集合中所有数据

        find() 方法可以查询集合中的所有数据,类似 SQL 中的 SELECT * 操作。

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]for x in mycol.find():    print(x)
{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'NOWCODER', 'alexa': '10000', 'url': 'https://www.nowcoder.com'}{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}{'_id': ObjectId('5b236aa9c315325f5236bbb8'), 'name': 'Facebook', 'alexa': '10', 'url': 'https://www.facebook.com'}{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}{'_id': ObjectId('5b236aa9c315325f5236bbba'), 'name': 'Github', 'alexa': '109', 'url': 'https://www.github.com'}

查询指定字段的数据

        我们可以使用 find() 方法来查询指定字段的数据,将要返回的字段对应值设置为 1

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]for x in mycol.find({},{ "_id": 0, "name": 1, "alexa": 1 }):    print(x)

结果如下:

{'name': 'NOWCODER', 'alexa': '10000'}{'name': 'Google', 'alexa': '1'}{'name': 'Taobao', 'alexa': '100'}{'name': 'QQ', 'alexa': '101'}{'name': 'Facebook', 'alexa': '10'}{'name': '知乎', 'alexa': '103'}{'name': 'Github', 'alexa': '109'}

根据指定条件查询

        我们可以在 find() 中设置参数来过滤数据。

例:查找 name 字段为 "NOWCODER" 的数据

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]myquery = { "name": "NOWCODER" }mydoc = mycol.find(myquery)for x in mydoc:    print(x)

结果如下:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'NOWCODER', 'alexa': '10000', 'url': 'https://www.nowcoder.com'}

高级查询

        查询的条件语句中,我们还可以使用修饰符。

        以下实例用于读取 name 字段中第一个字母 ASCII 值大于 "H" 的数据,大于的修饰符条件为 {"$gt": "H"} :

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]myquery = { "name": { "$gt": "H" } }mydoc = mycol.find(myquery)for x in mydoc:    print(x)

 结果如下:

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'NOWCODER', 'alexa': '10000', 'url': 'https://www.nowcoder.com'}{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}{'_id': ObjectId('5b236aa9c315325f5236bbb7'), 'name': 'QQ', 'alexa': '101', 'url': 'https://www.qq.com'}{'_id': ObjectId('5b236aa9c315325f5236bbb9'), 'name': '知乎', 'alexa': '103', 'url': 'https://www.zhihu.com'}

返回指定条数记录

        如果我们要对查询结果设置指定条数的记录可以使用 limit() 方法,该方法只接受一个数字参数。

例:返回 3 条文档记录

myclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]myresult = mycol.find().limit(3)# 输出结果for x in myresult:    print(x)

结果只有三条了: 

{'_id': ObjectId('5b23696ac315325f269f28d1'), 'name': 'NOWCODER', 'alexa': '10000', 'url': 'https://www.nowcoder.com'}{'_id': ObjectId('5b2369cac315325f3698a1cf'), 'name': 'Google', 'alexa': '1', 'url': 'https://www.google.com'}{'_id': ObjectId('5b236aa9c315325f5236bbb6'), 'name': 'Taobao', 'alexa': '100', 'url': 'https://www.taobao.com'}

修改文档

        我们可以在 MongoDB 中使用 update_one() 方法修改文档中的记录。该方法第一个参数为查询的条件,第二个参数为要修改的字段。如果查找到的匹配数据多余一条,则只会修改第一条。

例:将 alexa 字段的值 10000 改为 12345

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]myquery = { "alexa": "10000" }newvalues = { "$set": { "alexa": "12345" } }mycol.update_one(myquery, newvalues)# 输出修改后的  "sites"  集合for x in mycol.find():    print(x)

update_one() 方法只能修匹配到的第一条记录,如果要修改所有匹配到的记录,可以使用 update_many()

以下实例将查找所有以 F 开头的 name 字段,并将匹配到所有记录的 alexa 字段修改为 123

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]myquery = { "name": { "$regex": "^F" } }newvalues = { "$set": { "alexa": "123" } }x = mycol.update_many(myquery, newvalues)print(x.modified_count, "文档已修改")

排序

        sort() 方法可以指定升序或降序排序。

        sort() 方法第一个参数为要排序的字段,第二个字段指定排序规则,1 为升序,-1 为降序,默认为升序。

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]mydoc = mycol.find().sort("alexa")for x in mydoc:    print(x)

以上代码实现了对字段 alexa 按升序排序。

删除数据

        我们可以使用 delete_one() 方法来删除一个文档,该方法第一个参数为查询对象,指定要删除哪些数据。

例:删除 name 字段值为 "Taobao" 的文档

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]myquery = { "name": "Taobao" }mycol.delete_one(myquery)# 删除后输出for x in mycol.find():    print(x)

删除多个文档

        我们可以使用 delete_many() 方法来删除多个文档,该方法第一个参数为查询对象,指定要删除哪些数据。

例:删除所有 name 字段中以 F 开头的文档

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]myquery = { "name": {"$regex": "^F"} }x = mycol.delete_many(myquery)print(x.deleted_count, "个文档已删除")

结果如下:

1 个文档已删除

删除集合中的所有文档

        delete_many() 方法如果传入的是一个空的查询对象,则会删除集合中的所有文档:

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]x = mycol.delete_many({})print(x.deleted_count, "个文档已删除")

 结果如下:

5 个文档已删除

删除集合

        我们可以使用 drop() 方法来删除一个集合。

以下实例删除了 customers 集合:

import pymongomyclient = pymongo.MongoClient("mongodb://localhost:27017/")mydb = myclient["nowcoderdb"]mycol = mydb["sites"]mycol.drop()

如果删除成功 drop() 返回 true,如果删除失败(集合不存在)则返回 false。


点击全文阅读


本文链接:http://zhangshiyu.com/post/45281.html

<< 上一篇 下一篇 >>

  • 评论(0)
  • 赞助本站

◎欢迎参与讨论,请在这里发表您的看法、交流您的观点。

最新文章

  • 春风不渡无心人最后结局(林至南霍以峦)_春风不渡无心人最后结局
  • 救助身价六十万的流浪狗后,室友疯了虐心反转_娜娜张琳爱犬后续更新+番外_小说后续在线阅读_无删减免费完结_
  • 送走老公的白月光,我转身嫁给了死对头完整文本_恩泽维生素薛泽恩免费看_小说后续在线阅读_无删减免费完结_
  • 所爱已隔人山人海看点十足(温掬月周既明)全书浏览_所爱已隔人山人海看点十足全书浏览
  • 犹若清风梦了云小说(叶知薇晏临渊)外篇+结局(犹若清风梦了云)全篇在线阅读
  • 我转岗做文员后,自称尸语者的男友小青梅急了全书+后续高分言情(江晚晴陆景行)
  • 我转岗做文员后,自称尸语者的男友小青梅急了全书+后续列表_我转岗做文员后,自称尸语者的男友小青梅急了全书+后续(江晚晴陆景行)
  • 风止于海,月沉于你快手热门_霍铮静姝宋昭昭阅读_小说后续在线阅读_无删减免费完结_
  • 在猎金游戏里和别人绑定生死后,男友悔哭了优质全文_沈英韶李倩陆北深精修版_小说后续在线阅读_无删减免费完结_
  • 我转岗做文员后,自称尸语者的男友小青梅急了江晚晴陆景行完本_我转岗做文员后,自称尸语者的男友小青梅急了(江晚晴陆景行)
  • 前传苏小朵卫献知续集:全文+番外穿成炮灰原配,首长白天总拉窗帘:结局+番外新上热文
  • 犹若清风梦了云列表_犹若清风梦了云(晏临渊叶知薇谢执玉)

    关于我们 | 我要投稿 | 免责申明

    Copyright © 2020-2022 ZhangShiYu.com Rights Reserved.豫ICP备2022013469号-1