pymongo给文档里的某个列表添加元素并去重以及操作符的表格

news2024/10/6 12:22:52

文章目录

    • 问题描述
    • 知识点收集
      • mongo的操作符:
        • 匹配符:
        • 选择符:
        • 函数操作:
        • 更新符:
        • 聚集符:
        • 字段操作符:

问题描述

给parts列表新增字典
新增前:
在这里插入图片描述
新增后:
在这里插入图片描述
代码:

    mongo_client = get_mongo_client()
    col = mongo_client.col_test       # 创建/进入集合
    data = {
        "book_name": "灵舟",
        "author": "无敌贱客",
        "book_url": "",
        "reads": 0,             # 阅读人数
        "parts": [
            {
                'chapter_name': '第一章 一个天下最美、最狠的女人',
                'chapter_url': 'https://www.23usp.com/xs_718/496377.html',
                'chapter_id': "111",
                "part_content": "xxxxxxxxxxxxxxxx"
             },
        ],            # 章节

        "collect": [],          # 收藏
        "blurb": "",            # 简介
        "book_img": "",         # 书籍封面
        "book_number": "",      # 书籍字数
        "book_types": "",       # 书籍类型
        "score": "",            # 书籍评分
    }

    # col.insert_one(data)        # 插入数据

    parts_data = {
        "$addToSet": {"parts": {"xx1": "ss2"}}      # 是向数组对象中添加元素和值,操作对象必须为数组类型的字段
    }

    workflow2 = col.update_one(
        {"book_name": "灵舟"}, parts_data)
    print(workflow2)

    query = col.find({}, {"parts.part_content": 0})

    for i in query:
        print(i)

# 控制台的打印
# <pymongo.results.UpdateResult object at 0x0000026853CF3FD0>
# {'_id': ObjectId('646c9868c872a3c3e351ef32'), 'book_name': '灵舟', 'author': '无敌贱客', 'book_url': '', 'reads': 0, 'parts': [{'chapter_name': '第一章 一个天下最美、最狠的女人', 'chapter_url': 'https://www.23usp.com/xs_718/496377.html', 'chapter_id': '111'}, {'xx1': 'ss2'}], 'collect': [], 'blurb': '', 'book_img': '', 'book_number': '', 'book_types': '', 'score': ''}

知识点收集

mongo的操作符:

来源于: https://doc.sequoiadb.com/cn/sequoiadb-cat_id-1432190898-edition_id-306

匹配符:

匹配符可以指定匹配条件,使查询仅返回符合条件的记录;还可以与函数操作配合使用,以实现更复杂的匹配操作。

匹配符列表如下:

匹配符描述示例
$gt大于db.sample.employee.find( { age: { $gt: 20 } } )
$gte大于等于db.sample.employee.find( { age: { $gte: 20 } } )
$lt小于db.sample.employee.find( { age: { $lt: 20 } } )
$lte小于等于db.sample.employee.find( { age: { $lte: 20 } } )
$ne不等于db.sample.employee.find( { age: { $ne: 20 } } )
$in集合内存在db.sample.employee.find( { age: { $in: [ 20, 21 ] } } )
$nin集合内不存在db.sample.employee.find( { age: { $nin: [ 20, 21 ] } } )
$all全部db.sample.employee.find( { age: { $all: [ 20, 21 ] } } )
$anddb.sample.employee.find( { $and: [ { age: 20 }, { name: “Tom” } ] } )
$notdb.sample.employee.find( { $not: [ { age: 20 }, { name: “Tom” } ] } )
$ordb.sample.employee.find( { $or: [ { age: 20 }, { name: “Tom” } ] } )
$exists存在db.sample.employee.find( { age: { $exists: 1 } } )
$elemMatch元素匹配db.sample.employee.find( { content: { $elemMatch: { age: 20 } } } )
$+标识符数组元素匹配db.sample.employee.find( { “array.$2”: 10 } )
$regex正则表达式db.sample.employee.find( { str: { $regex: ‘dh, * fj’, $options:‘i’ } } )
$mod取模匹配db.sample.employee.find( { “age”: { “$mod”: [ 5, 3 ] } } )
$et相等匹配db.sample.employee.find( { “id”: { “$et”: 1 } } )
$isnull选择集合中指定字段是否为空或不存在db.sample.employee.find( { age: { $isnull: 0 } } )

数组属性操作

数组属性操作描述示例
$expand数组展开成多条记录db.sample.employee.find( { a: { $expand: 1 } } )
$returnMatch返回匹配的数组元素db.sample.employee.find( { a: { $returnMatch: 0, $in: [ 1, 4, 7 ] } } )

选择符:

实现对查询的结果字段进行拆分、筛选等功能
选择符可以实现对查询的结果字段进行拆分、筛选等功能。在选择符中使用函数操作还能实现对结果的重写和转换等操作。

支持的选择符如下:

选择符描述示例
$include选择或移除某个字段db.sample.employee.find({}, {“a”: {“$include”: 1}})
$default当字段不存在时返回默认值db.sample.employee.find({}, {“a”: {“$default”: “myvalue”}})
$elemMatch返回数组或者对象中满足条件的元素集合db.sample.employee.find({}, {“a”: {“$elemMatch”: {“a”: 1}}})
$elemMatchOne返回数组或者对象中满足条件的第一个元素db.sample.employee.find({}, {“a”: {“$elemMatchOne”: {“a”: 1}}})

函数操作:

配合匹配符和选择符使用,以实现更复杂的功能
函数操作可以配合匹配符和选择符使用,以实现更复杂的功能。

  • 配合匹配符一起使用,可以对字段进行各种函数运算之后,再执行匹配操作。

    以下示例,匹配字段 a 长度为 3 的记录:

    > db.sample.employee.find({a:{$strlen:1, $et:3}})
    

    Copy

    Note:

    先获取字段 a 的长度,再用该长度与 3 比较,返回长度为 3 的记录。

  • 作为选择符使用,可以对选取的字段进行函数运算,返回运算后的结果。

    以下示例,返回将字段 a 转大写的结果:

    > db.sample.employee.find({}, {a:{$upper:1}})
    

    Copy

所有支持的函数操作如下:

函数描述示例
$abs取绝对值db.sample.employee.find({}, {a:{$abs:1}})
$ceiling向上取整db.sample.employee.find({}, {a:{$ceiling:1}})
$floor向下取整db.sample.employee.find({}, {a:{$floor:1}})
$mod取模运算db.sample.employee.find({}, {a:{$mod:1}})
$add加法运算db.sample.employee.find({}, {a:{$add:10}})
$subtract减法运算db.sample.employee.find({}, {a:{$subtract:10}})
$multiply乘法运算db.sample.employee.find({}, {a:{$multiply:10}})
$divide除法运算db.sample.employee.find({}, {a:{$divide:10}})
$substr截取子串db.sample.employee.find({}, {a:{$substr:[0,4]}})
$strlen获取指定字段的字节数db.sample.employee.find({}, {a:{$strlen:10}})
$strlenBytes获取指定字段的字节数db.sample.employee.find({}, {a:{$strlenBytes:10}})
$strlenCP获取指定字段的字符数db.sample.employee.find({}, {a:{$strlenCP:10}})
$lower字符串转为小写db.sample.employee.find({}, {a:{$lower:1}})
$upper字符串转为大写db.sample.employee.find({}, {a:{$upper:1}})
$ltrim去除左侧空格db.sample.employee.find({}, {a:{$ltrim:1}})
$rtrim去除右侧空格db.sample.employee.find({}, {a:{$rtrim:1}})
$trim去除左右两侧空格db.sample.employee.find({}, {a:{$trim:1}})
$cast转换字段类型db.sample.employee.find({}, {a:{$cast:“int32”}})
$size获取数组元素个数db.sample.employee.find({}, {a:{$size:1}})
$type获取字段类型db.sample.employee.find({}, {a:{$type:1}})
$slice截取数组元素db.sample.employee.find({}, {a:{$slice:[0,2]}})

函数操作可以支持流水线式处理,多个函数流水线执行:

> db.sample.employee.find({a:{$trim:1, $upper:1, $et:"ABC"}})

Copy

Note:

先对字段 a 去除左右两侧空格,然后再转换成大写,最后匹配与"ABC"相等的记录

当字段类型为数组类型时,函数会对该字段做一次展开,并对每个数组元素执行函数操作。

以取绝对函值函数为例:

> db.sample.employee.find()
{
  "a": [
    1,
    -3,
    -9
  ]
}

> db.sample.employee.find({}, {a:{$abs:1}})
{
  "a": [
    1,
    3,
    9
  ]
}

更新符:

实现对字段的添加、修改和删除操作
更新符可以实现对字段的添加、修改和删除操作,SequoiaDB 巨杉数据库支持的更新符如下:

更新符描述示例
$inc增加指定字段的值db.sample.employee.update({KaTeX parse error: Expected 'EOF', got '}' at position 17: …nc:{age:5,ID:1}}̲,{age:{gt:15}})
$set将指定字段更新为指定的值db.sample.employee.update({$set:{str:“abd”}})
$unset删除指定的字段db.sample.employee.update({$unset:{name:“”,age:“”}})
$bit将指定字段的值与指定的值进行位运算db.sample.employee.update({$bit:{a:{xor:5}}})
$rename将指定字段重命名db.sample.employee.update({$rename:{‘a’:‘c’,‘b’:‘d’}})
$addtoset向数组中添加元素和值db.sample.employee.update({KaTeX parse error: Expected 'EOF', got '}' at position 23: …t:{arr:[1,3,5]}}̲,{arr:{exists:1}})
$pop删除指定数组中的最后N个元素db.sample.employee.update({$pop:{arr:2}})
$pull $pull_by清除指定数组中的指定值db.sample.employee.update({KaTeX parse error: Expected 'EOF', got '}' at position 24: …r:2,name:"Tom"}}̲) db.sample.emp…pull_by:{arr:2,name:“Tom”}})
$pull_all $pull_all_by清除指定数组中的指定值db.sample.employee.update({KaTeX parse error: Expected 'EOF', got '}' at position 34: …],name:["Tom"]}}̲) db.sample.emp…pull_all_by:{arr:[2,3],name:[“Tom”]}})
$push将给定值插入到数组中db.sample.employee.update({$push:{arr:1}})
$push_all向指定数组中插入所有给定值db.sample.employee.update({$push_all:{arr:[1,2,8,9]}})
$replace将集合中除 _id 字段和自增字段外的文档内容全部替换db.sample.employee.update({KaTeX parse error: Expected 'EOF', got '}' at position 31: …name:'default'}}̲,{age:{exists:0}})

聚集符:

配合 aggregate() 使用,计算集合中数据的聚合值
SequoiaDB 巨杉数据库支持以下聚集符:

参数名描述示例
$project选择需要输出的字段名,1 表示输出,0 表示不输出,还可以实现字段的重命名{ KaTeX parse error: Expected '}', got 'EOF' at end of input: …d: 0, aliase: "field3" } }
$match实现从集合中选择匹配条件的记录,相当于 SQL 语句的 where{$match: { field: { $lte: value } } }
$limit限制返回的记录条数{ $limit: 10 }
$skip控制结果集的开始点,即跳过结果集中指定条数的记录{ $skip: 5 }
$group实现对记录的分组,类似于 SQL 的 group by 语句,_id 指定分组字段{ KaTeX parse error: Expected '}', got 'EOF' at end of input: group: { _id: "field" } }
$sort实现对结果集的排序,1 代表升序,-1 代表降序{ $sort: { field1: 1, field2: -1, … } }

Note:

聚集符的使用方法可以参考 SdbCollection.aggregate()。

字段操作符:

实现对字段值进行匹配查询、修改等功能
字段操作符可以实现对字段值进行匹配查询、修改等功能,SequoiaDB 巨杉数据库支持以下字段操作符:

参数名描述示例
$field取出指定字段的值,应用于其它操作({KaTeX parse error: Expected '}', got 'EOF' at end of input: … {t1: {Value: {field: “t2”}}}})

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/559830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【ZYNQ】ZYNQ7000 UART 控制器及驱动示例

简介 UART 控制器介绍 UART 控制器是一个全双工异步收发控制器&#xff0c;ZYNQ 内部包含两个 UART 控制器&#xff0c;UART0 和 UART1。每一个 UART 控制器支持可编程的波特率发生器、64 字节的接收 FIFO 和发送 FIFO、产生中断、RXD 和 TXD 信号的环回模式设置以及可配置的…

第一个SpringBoot程序

如何创建一个SpringBoot项目&#xff0c;两种方式&#xff0c;官网或IDEA 官方提供了一个快速生成的网站&#xff0c;IDE集成了这个网站 spring官网 Spring | Homehttps://spring.io/进入spring官网&#xff0c;点击projects&#xff0c;点击SpringBoot&#xff0c;进到如下…

前端设计必须知道!7个超实用的工具推荐!

前端网络开发作为一个高薪行业&#xff0c;近年来的繁荣是业内人士所看到的。网络开发工具也在上升&#xff0c;市场上出现了越来越多的前端页面设计工具。但随着前端页面设计工具数量的增加&#xff0c;找到合适的前端页面设计工具来完成工作有时会让开发团队感到困惑。 本文…

看不上的年金险

前言 像我这种“资深”股民&#xff0c;激进的有股票期货&#xff0c;稳健的有国债、政策性金融债、地方政府债、城投债&#xff0c;中间的还有etf、宽基指数、指增基金&#xff0c;平时因为对冲风险买点保障性保险也就罢了&#xff0c;储蓄型的保险压根看不上。 但现在通过熬…

Golang语言初识

Windows 下搭建 Go 开发环境-安装和配置 SDK 采用文章 2.5.1介绍了 SDK SDK 的全称(Software Development Kit 软件开发工具包)SDK 是提供给开发人员使用的&#xff0c;其中包含了对应开发语言的工具包 2.5.2下载 SDK 工具包 1) Go 语言的官网为&#xff1a;golang.org , 因…

基于单片机的步进电机驱动电路设计

基于单片机的步进电机驱动电路设计 步进电机在控制系统中具有广泛的应用。它可以把脉冲信号转换成角位移&#xff0c;并且可用作电磁制动轮、电磁差分器、或角位移发生器等。 有时从一些旧设备上拆下的步进电机(这种电机一般没有损坏)要改作它用&#xff0c;一般需自己设计驱动…

Flask 设置头像及创建帖子模型类

我们经常在一些网站上看到&#xff0c;在用户没有自定义头像的情况下&#xff0c;会给每个用户都生成一个头像&#xff0c;这让网站显得更美观&#xff0c;那这个是怎么实现的呢&#xff1f;在Flask中有一个插件&#xff0c;叫做Flask-avatars&#xff0c;专门提供头像解决方案…

UNIX网络编程卷一 学习笔记 第十五章 Unix域协议

本书中&#xff0c;作者说Unix域数据报套接字是不可靠的&#xff0c;这一说法已经过时&#xff0c;当前大多实现中&#xff0c;Unix域套接字都是可靠的&#xff0c;不论是数据报套接字还是字节流套接字。 Unix域协议不是一个实际的协议族&#xff0c;而是单个主机上执行客户/服…

人员定位及轨迹管理技术原理及应用领域

人员定位及轨迹管理的实现涉及多种技术和设备。例如&#xff0c;在GPS定位方面&#xff0c;使用卫星系统可以提供全球范围内的准确定位信息。然而&#xff0c;GPS在室内环境下的信号覆盖可能存在限制&#xff0c;因此在室内定位应用中&#xff0c;常常采用无线传感器网络&#…

Python简单的验证码识别: 图片验证, 滑动验证, 点选验证...

目录 前言环境使用:模块使用:代码展示图片验证码滑动验证码:点选验证: 尾语 &#x1f49d; 前言 嗨喽~大家好呀&#xff0c;这里是魔王呐 ❤ ~! 环境使用: Python 3.8 解释器 Pycharm 编辑器 模块使用: selenium --> pip install selenium3.141.0 ddddocr --> pip i…

springcloud-alibaba (03)sentinel实现规则持久化-流控规则为例

Sentinel和Nacos的整合可以实现规则动态配置&#xff0c;即在Nacos中修改规则后&#xff0c;Sentinel能够实时地读取并应用新的规则。而规则持久化则是指将规则保存在Nacos中&#xff0c;以避免意外故障或重启时规则被丢失。 实现规则持久化&#xff0c;可以按照以下步骤进行操…

龙蜥白皮书精选:利用 io_uring 提升数据库系统性能

文/高性能存储 SIG 01 背景介绍 传统的 IO 软件栈已经无法完全释放出高性能存储设备的性能&#xff0c;高性能 IO 栈是当前存储领域重点研究的课题之一&#xff0c;代表性的如用户态方案 SPDK&#xff0c;以及标准的内核态方案 io_uring。 02 关键技术 Linux 社区从零开始设…

Raft算法

这是一种选举算法&#xff0c;用来确认分布式架构下主节点(领导者)是哪一个结点 只有成为了主节点才能向其他结点进行指令的下达来进行数据的同步 三种角色&#xff1a;追随者Follower&#xff0c;候选人Candidate&#xff0c;领导者leader (1)追随者Follower&#xff1a;接收…

电脑版pdf阅读器有哪些?编辑途径分析

PDF 阅读器电脑版是一种十分流行的电子文档阅读工具&#xff0c;它可以让用户在电脑上轻松地阅读各种文档&#xff0c;包括 PDF 文件。在数字化信息时代&#xff0c;PDF 阅读器电脑版已经成为了许多人电脑上必备的工具之一。本文将探讨 PDF 阅读器电脑版的优缺点&#xff0c;以…

【面试题】面试官:谈谈你知道的DOM常见的操作

大厂面试题分享 面试题库 前后端面试题库 &#xff08;面试必备&#xff09; 推荐&#xff1a;★★★★★ 地址&#xff1a;前端面试题库 web前端面试题库 VS java后端面试题库大全 前言 面试官&#xff1a;“谈谈你知道的DOM常见的操作” 紧张的萌新&#xff1a;“可以获…

达梦数据库索引的建立使用

达梦数据库支持聚集索引&#xff0c;复合索引&#xff0c;函数索引&#xff0c;唯一索引&#xff0c;位图索引等等。 一.建立索引的准则 1.1在表中插入数据后创建索引 一般情况下&#xff0c;在插入或装载了数据后&#xff0c;为表创建索引会更加有效率。如果在装载数据之前…

基于最新SolVES 模型与多技术融合【QGIS、PostgreSQL、ARCGIS、MAXENT、R】实现生态系统服务功能社会价值评估及拓展案例分析

目录 第一章 理论基础与研究热点 第二章 SolVES 4.0 模型运行环境配置 第三章 SolVES 4.0 模型运行 第四章 数据获取与入库 第五章 环境变量与社会价值的相关分析 第六章 拓展案例分析 SolVES模型&#xff08;Social Values for Ecosystem Services&#xff09;全称为生态…

功能开发如何实现多终端设备上的体验统一?

多端能力服务统一&#xff08;Multi-Experience Service Orchestration&#xff0c;MESO&#xff09;是一种技术和服务架构的概念&#xff0c;旨在为多种终端设备提供统一的用户体验和功能。它解决了在不同终端设备上使用不同应用程序和服务时出现的问题&#xff0c;使得用户可…

【云原生-深入理解 Kubernetes 系列 3】深入理解容器进程的文件系统

文章目录 系列文章目录&#x1f479; 关于作者一、回顾二、容器进程的文件系统是什么样子的&#xff1f;rootfs一致性解决应用依赖关系解决复用性 三、OverlayFS 联合文件系统先决条件overlay2 驱动程序如何工作结构图探索含义-磁盘上的镜像层和容器层镜像层容器层 四、overlay…

Lua学习笔记:浅谈对闭包的认识

前言 本篇在讲什么 我们从几个方面简单认识和理解lua的闭包 本篇适合什么 适合初学Lua的小白 本篇需要什么 对Lua语法有简单认知 依赖Lua5.1的环境 依赖Sublime Text3编辑器 本篇的特色 具有全流程的图文教学 重实践&#xff0c;轻理论&#xff0c;快速上手 提供全…