文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python中怎么操作MongoDB文档数据库

2023-06-02 07:18

关注

Python中怎么操作MongoDB文档数据库,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。

1.Pymongo 安装
安装pymongo:pip install pymongo
2.Pymongo 方法
3.Pymongo 中的操作
from pymongo import MongoClientconnect = MongoClient(host='localhost', port=27017, username="root", password="123456")connect = MongoClient('mongodb://localhost:27017/', username="root", password="123456")print(connect.list_database_names())
test_db = connect['test']
collection = test_db['students']
from pymongo import MongoClientfrom datetime import datetimeconnect = MongoClient(host='localhost', port=27017, username="root", password="123456",)# 获取dbtest_db = connect['test']# 获取collectioncollection = test_db['students']# 构建documentdocument = {"author": "Mike",  "text": "My first blog post!", "tags": ["mongodb", "python", "pymongo"], "date": datetime.now()}# 插入documentone_insert = collection.insert_one(document=document)print(one_insert.inserted_id)# 通过条件过滤出一条documentone_result = collection.find_one({"author": "Mike"})# 解析document字段print(one_result, type(one_result))print(one_result['_id'])print(one_result['author'])注意:如果需要通过id查询一行document,需要将id包装为ObjectId类的实例对象from bson.objectid import ObjectIdcollection.find_one({'_id': ObjectId('5c2b18dedea5818bbd73b94c')})
from pymongo import MongoClientfrom datetime import datetimeconnect = MongoClient(host='localhost', port=27017, username="root", password="123456",)# 获取dbtest_db = connect['test']# 获取collectioncollection = test_db['students']documents = [{"author": "Mike","text": "Another post!","tags": ["bulk", "insert"], "date": datetime(2009, 11, 12, 11, 14)},{"author": "Eliot", "title": "MongoDB is fun", "text": "and pretty easy too!", "date": datetime(2009, 11, 10, 10, 45)}]collection.insert_many(documents=documents)# 通过条件过滤出多条documentdocuments = collection.find({"author": "Mike"})# 解析document字段print(documents, type(documents))print('*'*300)for document in documents:    print(document)print('*'*300)result = collection.count_documents({'author': 'Mike'})print(result)
from pymongo import MongoClientfrom datetime import datetimeconnect = MongoClient(host='localhost', port=27017, username="root", password="123456",)# 获取dbtest_db = connect['test']# 获取collectioncollection = test_db['students']# 通过条件过滤时间小于datetime(2019, 1,1,15,40,3) 的documentdocuments = collection.find({"date": {"$lt": datetime(2019, 1,1,15,40,3)}}).sort('date')# 解析document字段print(documents, type(documents))print('*'*300)for document in documents:    print(document)
from pymongo import MongoClientimport pymongofrom datetime import datetimeconnect = MongoClient(host='localhost', port=27017, username="root", password="123456",)# 获取dbtest_db = connect['test']# 获取collectioncollection = test_db['students']# 创建字段索引collection.create_index(keys=[("name", pymongo.DESCENDING)], unique=True)# 查询索引result = sorted(list(collection.index_information()))print(result)
from pymongo import MongoClientconnect = MongoClient(host='localhost', port=27017, username="root", password="123456",)# 获取dbtest_db = connect['test']# 获取collectioncollection = test_db['students']result = collection.update({'name': 'robby'}, {'$set': {"name": "Petter"}})print(result)注意:还有update_many()方法
from pymongo import MongoClientconnect = MongoClient(host='localhost', port=27017, username="root", password="123456",)# 获取dbtest_db = connect['test']# 获取collectioncollection = test_db['students']result = collection.delete_one({'name': 'Petter'})print(result.deleted_count)注意:还有delete_many()方法
4.MongoDB ODM 详解
# 安装mongoenginepip install mongoengine
BinaryFieldBooleanFieldComplexDateTimeFieldDateTimeFieldDecimalFieldDictFieldDynamicFieldEmailFieldEmbeddedDocumentFieldEmbeddedDocumentListFieldFileFieldFloatFieldGenericEmbeddedDocumentFieldGenericReferenceFieldGenericLazyReferenceFieldGeoPointFieldImageFieldIntFieldListField:可以将自定义的文档类型嵌套MapFieldObjectIdFieldReferenceFieldLazyReferenceFieldSequenceFieldSortedListFieldStringFieldURLFieldUUIDFieldPointFieldLineStringFieldPolygonFieldMultiPointFieldMultiLineStringFieldMultiPolygonField
5.使用mongoengine创建数据库连接
from mongoengine import connectconn = connect(db='test', host='localhost', port=27017, username='root', password='123456', authentication_source='admin')print(conn)

connect(db = None,alias ='default',** kwargs );

构建文档模型,插入数据

from mongoengine import connect, \                        Document, \                        StringField,\                        IntField, \                        FloatField,\                        ListField, \                        EmbeddedDocumentField,\                        DateTimeField, \                        EmbeddedDocumentfrom datetime import datetime# 嵌套文档class Score(EmbeddedDocument):    name = StringField(max_length=50, required=True)    value = FloatField(required=True)class Students(Document):    choice =  (('F', 'female'),               ('M', 'male'),)    name = StringField(max_length=100, required=True, unique=True)    age = IntField(required=True)    hobby = StringField(max_length=100, required=True, )    gender = StringField(choices=choice, required=True)    # 这里使用到了嵌套文档,这个列表中的每一个元素都是一个字典,因此使用嵌套类型的字段    score = ListField(EmbeddedDocumentField(Score))    time = DateTimeField(default=datetime.now())if __name__ == '__main__':    connect(db='test', host='localhost', port=27017, username='root', password='123456', authentication_source='admin')    math_score = Score(name='math', value=94)    chinese_score = Score(name='chinese', value=100)    python_score = Score(name='python', value=99)    for i in range(10):        students = Students(name='robby{}'.format(i), age=int('{}'.format(i)), hobby='read', gender='M', score=[math_score, chinese_score, python_score])        students.save()

查询数据

from mongoengine import connect, \                        Document, \                        StringField,\                        IntField, \                        FloatField,\                        ListField, \                        EmbeddedDocumentField,\                        DateTimeField, \                        EmbeddedDocumentfrom datetime import datetime# 嵌套文档class Score(EmbeddedDocument):    name = StringField(max_length=50, required=True)    value = FloatField(required=True)class Students(Document):    choice =  (('F', 'female'),               ('M', 'male'),)    name = StringField(max_length=100, required=True, unique=True)    age = IntField(required=True)    hobby = StringField(max_length=100, required=True, )    gender = StringField(choices=choice, required=True)    # 这里使用到了嵌套文档,这个列表中的每一个元素都是一个字典,因此使用嵌套类型的字段    score = ListField(EmbeddedDocumentField(Score))    time = DateTimeField(default=datetime.now())if __name__ == '__main__':    connect(db='test', host='localhost', port=27017, username='root', password='123456', authentication_source='admin')    first_document = Students.objects.first()    all_document = Students.objects.all()    # 如果只有一条,也可以使用get    specific_document = Students.objects.filter(name='robby3')    print(first_document.name, first_document.age, first_document.time)    for document in all_document:        print(document.name)    for document in specific_document:        print(document.name, document.age)

修改、更新、删除数据

from mongoengine import connect, \                        Document, \                        StringField,\                        IntField, \                        FloatField,\                        ListField, \                        EmbeddedDocumentField,\                        DateTimeField, \                        EmbeddedDocumentfrom datetime import datetime# 嵌套文档class Score(EmbeddedDocument):    name = StringField(max_length=50, required=True)    value = FloatField(required=True)class Students(Document):    choice =  (('F', 'female'),               ('M', 'male'),)    name = StringField(max_length=100, required=True, unique=True)    age = IntField(required=True)    hobby = StringField(max_length=100, required=True, )    gender = StringField(choices=choice, required=True)    # 这里使用到了嵌套文档,这个列表中的每一个元素都是一个字典,因此使用嵌套类型的字段    score = ListField(EmbeddedDocumentField(Score))    time = DateTimeField(default=datetime.now())if __name__ == '__main__':    connect(db='test', host='localhost', port=27017, username='root', password='123456', authentication_source='admin')    specific_document = Students.objects.filter(name='robby3')    specific_document.update(set__age=100)    specific_document.update_one(set__age=100)    for document in specific_document:        document.name = 'ROBBY100'        document.save()    for document in specific_document:        document.delete()
嵌入式文档查询的方法

看完上述内容,你们掌握Python中怎么操作MongoDB文档数据库的方法了吗?如果还想学到更多技能或想了解更多相关内容,欢迎关注编程网行业资讯频道,感谢各位的阅读!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯