IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> mongoengine的使用 -> 正文阅读

[大数据]mongoengine的使用

url连接mongo

connect()或register_connection()

连接多个数据库时需要设置alias

connect(host='mongodb://119.23.10.188:61452/golem')
# 连接多个数据库时需要设置alias
# connect(host='mongodb://119.23.10.188:61452/octopus', alias='octopus')

register_connection(alias='golem', db='golem', host='mongodb://119.23.10.188:61452/golem')

编写Models/Objects

# Copyright 2021 EasyStack, Inc.

from mongoengine.document import Document
from mongoengine.document import EmbeddedDocument
from mongoengine import fields

class Rules(EmbeddedDocument):
    
    target_backup_vault_id = fields.StringField(required=True)
    lifecycle = fields.DictField(required=True)
    schedule_expression = fields.StringField(required=True)
    rule_name = fields.StringField(required=True)
    start_windows_minutes = fields.IntField(required=True)
    completion_windows_minutes = fields.IntField(required=True)

class Plan(Document):

    name = fields.StringField(nullable=True)
    description = fields.StringField(nullable=True)
    project_id = fields.StringField(nullable=True)
    created_at = fields.DateTimeField(nullable=True)
    last_execution_date = fields.DateTimeField(nullable=True)
    rules = fields.EmbeddedDocumentField(Rules, nullable=True)

    meta = {
        'db_alias': 'golem', #指定归属哪个数据库
        'collection': 'plans', #指定集合名,没有会新建
        'indexes': [ #设置索引
            {
                'fields': ['project_id'],
                'name': 'project_idx'
            }
        ]
    }

特殊Document类型

DynamicDocument 动态document,可以动态增加属性

EmbeddedDocument 嵌入document,只能作为其余document的属性类型,不会创建表

特殊Field类型

EmbeddedDocumentField 使用EmbeddedDocument 作为参数

ReferenceField 使用其他已知document作为参数

GenericReferenceField 使用其他未知document作为参数

创建表/保存数据

调用save()时,若对象无id或id不存在时会新建数据,若对象有id且数据库存在时会修改数据

values = {
    "name": "plan",
    "project_id": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "description": "test plan",
    "rules": {
        "target_backup_vault_id": "string",
        "lifecycle": {
            "delete_after_days": 365
        },
        "schedule_expression": "cron(0 5 ? * * *)",
        "rule_name": "string",
        "start_windows_minutes": 0,
        "completion_windows_minutes": 0
    },
    "created_at": "2021-12-31T08:49:35.832Z",
    "last_execution_date": "2021-12-31T08:49:35.832Z"
}

rule = Rules(**values.pop('rules'))
plan = Plan(**values, rules=rule)
plan.save() # plan对象无id,此时会新建表,新建数据,新建后会自动赋值新id
plan.description = 'new plan'
plan.save() # plan对象已有id,此时会修改数据

查询数据

Document

# 获取所有
Plan.objects()
# 条件查询
Plan.objects(name='plan')
# 根据id查询一个
Plan.objects(id='id').first()

更新数据

使用update()或者save()

# 根据id查询到原数据,再update
plan = models.Plan.objects(id=id).first()
plan.update(**values)

# 直接使用新数据创建
plan = model.Plan(**values, id=id)
plan.save()
  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2022-04-01 00:08:39  更:2022-04-01 00:12:14 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 4:55:19-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码