MongoEngine中文文档
一、简介:MongoEngine是一个基于pymongo开发的ODM库,对应与SQLAlchemy。同时,在MongoEngine基础上封装了Flask-MongoEngine,用于支持flask框架。⚠️注:本文内容来自官方文档(地址:http://docs.mongoengine.org/index.html )二、入门教程1、【安装MongoEngine】pip3 install mongoengine⚠️注:安装python3.x时自动安装pip3工具2、【链接至MongoDB】2.1、连接数据库- 2.1.1、方法一 连接本地数据库from mongoengine import connect connect('dbname', alias='别名')⚠️注:默认链接至本地数据库127.0.0.1:27017,每次创建连接可以给这几个连接取一个别名,用于区别其它的连接,默认情况下别名为default- 2.1.2、方法二 连接远程数据库from mongoengine import connect connect('dbname', host='远程服务器IP地址', post=开放的端口号)- 2.1.3、方法三 连接带有验证的远程数据库from mongoengine import connect connect('dbname', username='用户名', password='密码', authentication_source='admin', host='远程服务器IP地址', post=开放的端口号)- 2.1.4、方法四 URI方式连接数据库from mongoengine import connect connect('dbname', host='mongodb://用户名:密码@服务器IP地址database_name')2.2、连接至副本from mongoengine import connect # Regular connect connect('dbname', replicaset='rs-name') # URI风格连接 connect(host='mongodb://localhost/dbname?replicaSet=rs-name')2.3、连接至多个数据库要使用多个数据库,您可以使用connect()并为连接提供别名(alisa),默认使用“default”。在后台,这用于register_connection()存储数据,如果需要,您可以预先注册所有别名。- 2.3.1、在不同数据库中定义的文档通过在元数据中提供db_alias,可以将各个文档附加到不同的数据库 。这允许DBRef 对象指向数据库和集合。下面是一个示例模式,使用3个不同的数据库来存储数据connect (alias = 'user-db-alias' , db = 'user-db' ) connect (alias = 'book-db-alias' , db = 'book-db' ) connect (alias = 'users-books-db -alias' , db = 'users-books-db' ) class User (Document ): name = StringField () meta = { 'db_alias' : 'user-db-alias' } class Book(Document ): name = StringField () meta = { 'db_alias' : 'book-db-alias' } class AuthorBooks (Document ): author = ReferenceField (User ) book = ReferenceField (Book ) meta = { 'db_alias' : ' users-books-db-alias' }- 2.3.2、断开现有连接该功能 disconnect() 可用于断开特定连接。这可用于全局更改连接:from mongoengine import connect, disconnect connect('a_db', alias='db1') # ==》 建立别名为“db1”的连接 class User(Document): name = StringField() meta = {'db_alias': 'db1'} disconnect(alias='db1') # ==》 断开 别名为“db1”的连接 connect('another_db', alias='db1') # ==》 由于上一步断开了别名为db1的连接,现在连接其它数据库时又可以使用别名“db1”作为连接名2.4 上下文管理器 context_managers有时您可能希望切换数据库或集合以进行查询- 2.4.1 切换数据库 switch_db()switch_db上允许更改数据库别名给定类,允许快速和方便地跨数据库访问:⚠️注:切换数据库,必须预先注册别名(使用已注册的别名)from mongoengine.context_managers import switch_db class User(Document): name = StringField() meta = {'db_alias': 'user-db'} with switch_db(User, 'archive-user-db') as User: User(name='Ross').save() # ===》 这时会将数据保存至 'archive-user-db'- 2.4.2 切换文档 switch_collection()switch_collection()上下文管理器允许更改集合,允许快速和方便地跨集合访问:from mongoengine.context_managers import switch_collection class Group(Document): name = StringField() Group(name='test').save() # 保存至默认数据库 with switch_collection(Group, 'group2000') as Group: Group(name='hello Group 2000 collection!').save() # 将数据保存至 group2000 集合3、【定义文档 Defining Documents】3.1、定义文档模型 Defining a document’s schemaMongoEngine允许为文档定义模式,因为这有助于减少编码错误,并允许在可能存在的字段上定义方法。为文档定义模式,需创建一个继承自Document的类,将字段对象作为类属性添加到文档类:from mongoengine import * import datetime class Page(Document): title = StringField(max_length=200, required=True) # ===》 创建一个String型的字段title,最大长度为200字节且为必填项 date_modified = DateTimeField(default=datetime.datetime.utcnow) # ===》 创建一个时间类型的字段(utcnow是世界时间,now是本地计算机时间)3.2、定义“动态”文档模型 Defining a dynamic document’s schema动态文档(Dynamic Document)跟非动态文档(document)的区别是,动态文档可以在模型基础上新增字段,但非动态文档不允许新增。⚠️注意:动态文档有一点需要注意:字段不能以_开头from mongoengine import * class Page(DynamicDocument): title = StringField(max_length=200, required=True) # 创建一个page实例,并新增tags字段 page = Page(title='Using MongoEngine') page.tags = ['mongodb', 'mongoengine'] page.save() =====》# 不会报错,可以被保存至数据库 Page.objects(tags='mongoengine').count() =====》# 统计 tags=‘mongengine’的文档数 13.3 字段 Fields字段类型包含:(以“》”开头的是常用类型,“》”仅用于标注)》BinaryField # 二进制字段 》BooleanField # 布尔型字段 》DateTimeField # 后六位精确到毫妙的时间类型字段 ComplexDateTimeField # 后六位精确到微妙的时间类型字段 DecimalField # 》DictField # 字典类型字段 》DynamicField # 动态类型字段,能够处理不同类型的数据 》EmailField # 邮件类型字段 》EmbeddedDocumentField # 嵌入式文档类型 》StringField # 字符串类型字段 》URLField # URL类型字段 》SequenceField # 顺序计数器字段,自增长 》ListField # 列表类型字段 》ReferenceField # 引用类型字段 LazyReferenceField 》IntField # 整数类型字段,存储大小为32字节 LongField # 长整型字段,存储大小为64字节 EmbeddedDocumentListField FileField # 列表类型字段 FloatField # 浮点数类型字段 GenericEmbeddedDocumentField # GenericReferenceField GenericLazyReferenceField GeoPointField ImageField MapField ObjectIdField SortedListField UUIDField PointField LineStringField PolygonField MultiPointField MultiLineStringField MultiPolygonField- 3.3.1 字段通用参数db_field (默认值:无) # MongoDB字段名称required (默认值:False) # 是否必须填写,如果设置为True且未在文档实例上设置字段,则在ValidationError验证文档时将引发default (默认值:无) # 默认值unique (默认值:False) # 是否唯一,如果为True,则集合中的任何文档都不具有此字段的相同值unique_with (默认值:无) # 唯一 字段列表primary_key (默认值:False) # 主键choices (默认值:无) # 限制​​该字段的值(例如列表,元组或集合)validation (可选的) # 可调用以验证字段的值。callable将值作为参数,如果验证失败,则应引发ValidationError「举例」def _not_empty(val): if not val: raise ValidationError('value can not be empty') class Person(Document): name = StringField(validation=_not_empty)**kwargs (可选的)- 3.3.2 类标字段 ListField使用ListField字段类型可以向 Document添加项目列表。ListField将另一个字段对象作为其第一个参数,该参数指定可以在列表中存储哪些类型元素:「举例」class Page (Document ): tags = ListField (StringField (max_length = 50 )) # ===》 ListField中存放字符串字段 # 应该可以存放任意类型字段- 3.3.3 内嵌文档 Embedded DocumentMongoDB能够将文档嵌入到其他文档中。要创建嵌入式文档模型,需要继承EmbeddedDocument:「举例」# 创建嵌入式文档模型 class Comment(EmbeddedDocument): content = StringField() # 创建文档模型,且将 Comment 嵌入Post.comments列表字段中 class Page(Document): comments = ListField(EmbeddedDocumentField(Comment)) comment1 = Comment(content='Good work!') comment2 = Comment(content='Nice article!') page = Page(comments=[comment1, comment2])- 3.3.4 字典字段 Dictionary Fields不知道想要存储什么结构时,可以使用字典字段(字典字段不支持验证),字典可以存储复杂数据,其他字典,列表,对其他对象的引用,因此是最灵活的字段类型:「举例」class SurveyResponse(Document): date = DateTimeField() user = ReferenceField(User) # ===》 引用字段,引用User类 answers = DictField() survey_response = SurveyResponse(date=datetime.utcnow(), user=request.user) response_form = ResponseForm(request.POST) # ===》 这段和下一段代码,我没看明白 survey_response.answers = response_form.cleaned_data() # ===》 这段和上一段代码,我没看明白 survey_response.save()- 3.3.5 引用字段 Reference fields引用文档,类似关系型数据库中的外键,如果想引用自身这个类时,使用self关键字:「举例」class User(Document): name = StringField() class Page(Document): content = StringField() author = ReferenceField(User) # ===》引用User,即Page文档与User文档建立外键关系 john = User(name="John Smith") john.save() post = Page(content="Test Page") post.author = john post.save()引用自身「举例」class Employee(Document): name = StringField() boss = ReferenceField('self') # ====》引用自身 profile_page = ReferenceField('ProfilePage') class ProfilePage(Document): content = StringField()3.3.5.1. 用ListField建立一对多关系引用 One to Many with ListFields「举例」class User(Document): name = StringField() class Page(Document): content = StringField() authors = ListField(ReferenceField(User)) bob = User(name="Bob Jones").save() john = User(name="John Smith").save() Page(content="Test Page", authors=[bob, john]).save() Page(content="Another Page", authors=[john]).save() # 查找authored中包含 Bob 的文档 Page.objects(authors__in=[bob]) # 查找authored中包含

相关新闻

将查询的集合导出为Excel文件

将查询的集合导出为Excel文件

第一个是前台的script的代码,第二个是servlet中控制xml下载的代码这里直接复制黏贴拿来修改一下就好了,可以设置一个按钮访问这个servlet,methodexportXls就可以啦function exportXls(){var empId$("#empId").val();var deptNo$(&q…

2026/7/28 14:40:18 阅读更多 →
新博客

新博客

新个人博客

2026/7/28 14:40:18 阅读更多 →
Palworld存档修复工具:告别角色丢失,轻松迁移游戏数据

Palworld存档修复工具:告别角色丢失,轻松迁移游戏数据

Palworld存档修复工具:告别角色丢失,轻松迁移游戏数据 【免费下载链接】palworld-host-save-fix Fixes the bug which forces a player to create a new character when they already have a save. Useful for migrating maps from co-op to dedicated s…

2026/7/28 14:40:18 阅读更多 →

最新新闻

QQ聊天记录本地数据库解密:逆向工程与数据恢复实战指南

QQ聊天记录本地数据库解密:逆向工程与数据恢复实战指南

1. 项目概述:从数据安全视角看QQ聊天记录解密最近在数据安全与取证分析的圈子里,关于即时通讯应用本地数据解密的话题热度一直不减。特别是像QQ这样拥有海量用户、数据格式又历经多次变更的“老牌”应用,其本地数据库的解密需求,常…

2026/7/28 14:47:20 阅读更多 →
CSS3动画与3D

CSS3动画与3D

1、CSS3过渡在CSS3中,可以利用transition属性使元素的某一个属性在指定的时间内从“一个属性值”平滑过渡到“另外一个属性值”,从而实现动画效果。1)transition属性(1)transition-duration属性transition-duration属性…

2026/7/28 14:47:20 阅读更多 →
npm error  enoent:no such file or directory...are-we-there-yet ;  package.json文件和node_modules模相互转化

npm error enoent:no such file or directory...are-we-there-yet ; package.json文件和node_modules模相互转化

vue-cli项目一段时间没有变动,几个星期后继续编辑安装 npm install vue-skeleton-webpack-plugin 插件时报错 npm error enoent:no such file or directory...are-we-there-yet 错误 产生错误的原因:This is still an active issue on Modulus. Ive fo…

2026/7/28 14:47:20 阅读更多 →
字符串

字符串

字符串 存储: 计算机只能够存储二进制 所以存储字符串时 也需要转为二进制 所以就需要有一个对照表 方便将字符和二进制进行转换 这样的内容叫做编码方式 常见的有 ascii unicode 等定义字符串的新的方式var str new String("a");console.log(typeof str…

2026/7/28 14:47:20 阅读更多 →
聚类

聚类

文章目录一、定义二、相似度/距离计算方法总结三、k-means算法1.基本思想2.迭代过程3.简单应用4.总结四、层次聚类五、密度聚类DBSCAN算法1)相关概念2)算法流程一、定义 聚类就是对大量未知标注的数据集,按照数据内在的相似性将数据集划分为…

2026/7/28 14:47:20 阅读更多 →
Grasscutter Tools终极指南:原神私服玩家的可视化管理解决方案

Grasscutter Tools终极指南:原神私服玩家的可视化管理解决方案

Grasscutter Tools终极指南:原神私服玩家的可视化管理解决方案 【免费下载链接】grasscutter-tools A cross-platform client that combines launcher, command generation, and mod management to easily play Grasscutter; 一个结合了启动器、命令生成、MOD管理等…

2026/7/28 14:46:19 阅读更多 →

日新闻

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生

告别臃肿!3步让你的暗影精灵笔记本重获新生 【免费下载链接】OmenSuperHub Control Omen laptop performance, fan speeds, and keyboard lighting, and unlock power limits. 项目地址: https://gitcode.com/gh_mirrors/om/OmenSuperHub 你是否也曾为官方Om…

2026/7/28 0:00:43 阅读更多 →
RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

RAG必踩坑!财报法规检索不准?这款开源工具让答案浮出水面,准确率飙升98.7%!

做 RAG 的人应该都踩过这个致命的坑:把几百页的财报、法规、技术手册扔给向量库,问一个具体问题,搜出来的全是沾边但没用的内容 —— 关键信息要么被硬切块拆碎了,要么藏在几十条结果的最下面。语义相似≠真正相关,这个…

2026/7/28 0:00:43 阅读更多 →
抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

抖音视频文案提取工具全指南:免费2026版、手机App、在线工具一网打尽

2026年做短视频运营,从抖音上扒文案早就不是偷偷抄笔记的事了。我刚开始做内容的时候,每天刷半小时抖音,手动把爆款视频的口播敲进备忘录,一条2分钟的视频得花十来分钟,碰到语速快的还要反复回听。后来试了一圈工具&am…

2026/7/28 0:00:43 阅读更多 →

周新闻

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 道路桥梁裂缝检测数据集 道路桥梁病害识别检测数据集

深度学习道路桥梁裂缝检测系统 数据集6000张 完整源码已标注数据集训练好的模型环境配置教程程序运行说明文档,可以直接使用!系统支持图片、视频、摄像头等多种方式检测裂缝,功能强大实用。 1数据集6000张 8各类别

2026/7/28 12:04:22 阅读更多 →
深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

深度学习YOLO模型如何训练 PUBG 绝地求生目标检测数据集

pubg数据集 精选原图1.42万数据 1.49万标签 无任何重复、算法增强或冗余图像! pubg绝地求生目标检测数据集 1分类:e_body,14905个标签,txt格式 共计14244张图,99%为640*640尺寸图像 适合yolo目标检测、AI训练关键词&am…

2026/7/28 8:29:16 阅读更多 →
Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex英雄目标检测数据集 深度学习框架YOLO如何训练APEX数据集

Apex检测数据集数据集详情检测类别: allies enemy tag图片总量:7247张训练集:5139张验证集:1425张测试集:683张标注状态:全部已标注,即拿即用数据格式:支持YOLO格式及其他格式&#…

2026/7/28 5:03:42 阅读更多 →

月新闻