Mongodb管道函数操作数组,过滤,数组截取,条件分支,字符串合并

news2024/11/28 0:45:46
(学习的本质,不在于记住哪些知识,而在于它触发了你的思考——迈克尔·桑德尔)

在这里插入图片描述

假如有以下数据结构

其中features内value的数据结构是可变的

{
  "_id": {
    "$oid": "64bd0b17258d09faf6ebb6ee"
  },
  "id": {
    "id": "dania.mndz",
    "platform": "INSTAGRAM"
  },
  "__v": 0,
  "createdAt": {
    "$date": "2022-08-05T06:42:18.673Z"
  },
  "features": [
    {
      "type": "SHARED_NICKNAME_AVATAR",
      "value": {
        "nickname": "Dania Mendez",
        "avatar": "https://cdn.hypeauditor.com/img/instagram/user/15148153672.jpg?w=320&till=1697914801&sign=96da71c49c59693daf2e033bcf70dba3"
      }
    }
  ],
  "updatedAt": {
    "$date": "2023-07-22T19:00:00.554Z"
  }
}

对应的管道函数操作

[
  {
    $match: {
      // 筛选日期
      createdAt: {
        $lte: new Date(1690127999999),
      },
      // 多个同时满足的条件
      $and: [
        {
          "features.type": "SHARED_EMAIL",
        },
        // value字段必须存在
        {
          "features.value": {
            $exists: true,
          },
        },
        // value字段不能为空字符串
        {
          "features.value": {
            $ne: "",
          },
        },
        // value字段不能为以下模糊值
        {
          "features.value": {
            $nin: [
              /gmail.com/,
              /outlook.com/,
              /yahoo.com/,
              /icloud.com/,
              /mail.qq.com/,
              /qq.com/,
              /mail.ru/,
              /aol.com/,
              /gmx.com/,
              /mail.com/,
              /mail.163.com/,
              /163.com/,
              /protonmail.com/,
              /zoho.com/,
              /yandex.com/,
              /mail.sohu.com/,
              /sohu.com/,
              /hotmail.com/,
              /126.com/,
              /hushmail.com/,
              /tutanota.com/,
              /mail.sina.com.cn/,
              /sina.com.cn/,
              /naver.com/,
              /fastmail.com/,
              /posteo.de/,
            ],
          },
        },
      ],
    },
  },
  {
    // 排序
    $sort: {
      createdAt: -1,
    },
  },
  {
    $project: {
      name: "$id.id",
      platform: "$id.platform",
      // 对features进行过滤,只获取type等于SHARED_COUNTRY的
      countries: {
        $filter: {
          input: "$features",
          as: "doc",
          cond: {
            $eq: ["$$doc.type", "SHARED_COUNTRY"],
          },
        },
      },
      emails: {
        $filter: {
          input: "$features",
          as: "doc",
          cond: {
            $eq: ["$$doc.type", "SHARED_EMAIL"],
          },
        },
      },
      flowwers: {
        $filter: {
          input: "$features",
          as: "doc",
          cond: {
            $eq: [
              "$$doc.type",
              "SHARED_FOLLOWER_COUNT",
            ],
          },
        },
      },
      categories: {
        $filter: {
          input: "$features",
          as: "doc",
          cond: {
            $eq: [
              "$$doc.type",
              "SHARED_CATEGORY",
            ],
          },
        },
      },
      _id: 0,
    },
  },
  {
    $project: {
      name: 1,
      // 对emails进行截取,获取数组内的第一个
      email: {
        $first: "$emails.value",
      },
      fansCount: {
        $first: "$flowwers.value",
      },
      platform: 1,
      // 将platform值放入数组中
      platforms: ["$platform"],
      countries: [
        {
          $first: "$countries.value",
        },
      ],
      categories: {
        $first: "$categories.value",
      },
      media: {
        // 使用条件分支
        $switch: {
          branches: [
            {	
              // 如果platform的值等于INSTAGRAM
              case: {
                $eq: ["$platform", "INSTAGRAM"],
              },
              // 则使用$concat操作符将一下三个字符串进行拼接,其中$name是变量值
              then: {
                $concat: [
                  "https://www.instagram.com/",
                  "$name",
                  "/",
                ],
              },
            },
            {
              case: {
                $eq: ["$platform", "YOUTUBE"],
              },
              then: {
                $concat: [
                  "https://www.youtube.com/channel/",
                  "$name",
                  "/",
                ],
              },
            },
            {
              case: {
                $eq: ["$platform", "TIKTOK"],
              },
              then: {
                $concat: [
                  "https://www.tiktok.com/@",
                  "$name",
                  "/",
                ],
              },
            },
          ],
          // 否则返回默认值
          default: "Did not match",
        },
      },
    },
  },
  {
    $project: {
      platform: 0,
    },
  },
]

返回示例

{
  "name": "___2toua2___",
  "email": "unno@asobisystem.com",
  "fansCount": 620204,
  "platforms": [
    "INSTAGRAM"
  ],
  "countries": [
    "JP"
  ],
  "categories": [
    "1041",
    "1017"
  ],
  "media": "https://www.instagram.com/___2toua2___/"
}

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

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

相关文章

wpf控件上移下移,调整子集控件显示顺序

页面代码&#xff1a; <!-- 导出A2&#xff0c;自定义导出设置列&#xff0c;添加时间&#xff1a;2023-8-9 14:14:18&#xff0c;作者&#xff1a;whl&#xff1b; --><Window x:Class"WpfSnqkGasAnalysis.WindowGasExportA2"xmlns"http://schemas.…

【福建事业单位-资料分析】03 比重和平均数

【福建事业单位-资料分析】03 比重和平均数 一、比重&#xff08;现期比重&#xff0c;基期比重、两期比重&#xff09;1.1 现期比重增长贡献量&#xff0c;利润率 1.2基期比重&#xff08;用现期和增长率逆求&#xff09;1.3两期比重&#xff08;难点重点&#xff09;——比较…

工厂食堂就餐全攻略!还不赶紧来码住?

随着科技的不断进步&#xff0c;智能化系统在各个领域都呈现出令人瞩目的应用前景。在这个数字化时代&#xff0c;工厂食堂也逐渐走向智能化管理的道路。 智慧收银系统作为其中的一环&#xff0c;正为工厂食堂的效率提升、成本降低以及服务质量提升提供了全新的可能性。无需繁琐…

持有PMP证书,可申请CSPM证书!

一&#xff0c;CSPM介绍 CSPM的全称是&#xff1a;项目管理专业人员能力评价&#xff0c;是我们国内的“PMP”&#xff0c;是我们中国人自己的项目管理专业人士评价指南&#xff0c;符合中国国情且符合中国未来发展的项目管理专业人员能力评价标准。 2022年10月12日发布实施了…

计算机组成原理-笔记-第五章

目录 五、第五章——中央处理器 1、CPU的功能和基本结构 &#xff08;1&#xff09;运算器内部结构 &#xff08;2&#xff09;控制器的基本结构 &#xff08;3&#xff09;CPU的四大部分 2、指令执行过程&#xff08;数据流向 & 执行方案&#xff09; &#xff08;…

libheif —— 2、编写苹果、小米的.heic图片查看器

效果图 .heic简介 HEIC,是iOS 11更新后,iPhone 7及其后硬件,在拍摄照片时的默认图像存储格式。 HEIC是一种图像格式,上线时间还比较短,只有4年左右。自iOS 11和macOS High Sierra(10.13)内测开始,苹果将HEIC设置为图片存储的默认格式。与JPG相比,它占用的空间更小,画…

【ADS】在同一个symbol层次化实现理想器件和EM仿真的切换

ADS层次化切换理想器件和电磁仿真 1.需求描述2.实现步骤2.1 层次结构2.2 新建schematic2.3 新建symbol2.4 使用演示 3.后言 1.需求描述 在使用ADS做电磁仿真时&#xff0c;得到的结果需要多次迭代去接近原理图&#xff0c;那么就需要反复与原理图切换进行对比。 比较直接的方法…

Spring Initailizr--快速入门--SpringBoot的选择

&#x1f600;前言 本篇博文是关于IDEA使用Spring Initializer快速创建Spring Boot项目的说明&#xff0c;希望能够帮助到您&#x1f60a; &#x1f3e0;个人主页&#xff1a;晨犀主页 &#x1f9d1;个人简介&#xff1a;大家好&#xff0c;我是晨犀&#xff0c;希望我的文章可…

tsmc12 via0_grid

我正在「拾陆楼」和朋友们讨论有趣的话题,你⼀起来吧?拾陆楼知识星球入口 PG VIA0连接ME1和ME0,存在cell中奇数site中,如下图,所以两个cell在竖直方向邻接时要对其有via0的site,为了方便place与检查需要place前定义via0_grid,辅助奇数cell site落在grid上 自定义的via0_…

AcWing算法提高课-1.3.18能量石

宣传一下算法提高课整理 <— CSDN个人主页&#xff1a;更好的阅读体验 <— 本题链接&#xff08;AcWing&#xff09; 点这里 题目描述 岩石怪物杜达生活在魔法森林中&#xff0c;他在午餐时收集了 N N N 块能量石准备开吃。 由于他的嘴很小&#xff0c;所以一次只能…

Elasticsearch 与 OpenSearch:揭开性能差距

作者&#xff1a;George Kobar, Ugo Sangiorgi 对于任何依赖快速、准确搜索数据的组织来说&#xff0c;强大、快速且高效的搜索引擎是至关重要的元素。 对于开发人员和架构师来说&#xff0c;选择正确的搜索平台可以极大地影响你的组织提供快速且相关结果的能力。 在我们全面的…

突破笔试:力扣计算布尔二叉树的值(medium)

1.题目链接&#xff1a;2331. 计算布尔二叉树的值 2. 题目描述&#xff1a; 给你一棵 完整二叉树 的根&#xff0c;这棵树有以下特征&#xff1a;叶子节点 要么值为 0 要么值为 1 &#xff0c;其中 0 表示 False &#xff0c;1 表示 True 。 非叶子节点 要么值为 2 要么值为 …

通过Easy Excel导入数据

目录 &#x1f351;一、背景&#x1f351;二、开发验证&#x1f34a;2.1、引入easyexcel依赖&#x1f34a;2.2、创建表及基础代码&#x1f34a;2.3、处理类及接口&#x1f353;2.3.1、EasyExcel监听处理器&#x1f353;2.3.2、Controller接口&#x1f353;2.3.3、service调用监…

Vue3使用wangEditor

那么这一节我们在编辑公司信息的弹窗中使用富文本插件wangEditor官网 Vue3使用wangEditor 安装wangEditor在弹窗中引入wangEditor结构api接口部分editor组件script部分怎么去修改富文本的编辑器&#xff1f; 案例内效果&#xff1a; 安装wangEditor npm install wangeditor/…

bash: make: command not found

make之后报错信息如下&#xff1a;cd 对应的文件路径后 make 发现报错&#xff1a;bash: make: command not found 这个原因可能是没有安装make工具,也可能是安装了make之后,没有将make的文件路径添加到系统环境变量中 有没有安装make,可以使用Search Everything搜索是否有make…

24聊城大学823软件工程考研

1.软件发展有几个阶段&#xff1f;各有何特征&#xff1f; ①程序设计阶段 硬件特征&#xff1a;价格贵、存储容量小、运行可靠性差。 软件特征&#xff1a;只有程序、程序设计概念&#xff0c;不重视程序设计方法。 ②程序系统阶段。 硬件特征&#xff1a;速度、容量及工作可…

JS逆向系列之猿人学爬虫第11题 - app抓取 - so文件协议破解

题目地址 http://match.yuanrenxue.com/match/11这是个app题目,先下载下来安装到测试手机上 安装完成后的app界面长这样 打开之后是这样的: 要求已经简单明了了。 二话不说先反编译app 不出意外的是没出意外,源代码里面没啥混淆,所有东西都展示的明明白白的。 "…

Java转换流

文章目录 转换流的理解**InputStreamReader****OutputStreamWriter**练习 引入情况1&#xff1a; 使用FileReader 读取项目中的文本文件。由于IDEA设置中针对项目设置了UTF-8编码&#xff0c;当读取Windows系统中创建的文本文件时&#xff0c;如果Windows系统默认的是GBK编码&a…

每天一个知识点——Normalization

这里结合大模型的学习&#xff0c;主要分析Layer Norm、RMS Norm和Deep Norm的异同&#xff0c;与此同时&#xff0c;究竟是在之前执行Normalization&#xff08;Pre-Norm&#xff09;还是之后执行&#xff08;Post-Norm&#xff09;&#xff0c;也是一个比较喜欢拿来讨论的知识…

LoRaWAN网关与网络服务器(NS)的通信CUPS 协议介绍

LoRa Basics™ Station 定期查询 CUPS 服务器以获取更新。该协议是 HTTP/REST,使用Credentials中描述的客户端/服务器身份验证方法。对于每个查询,工作站都会提供有关其当前状态的信息,并接收包含其 LNS 和 CUPS 凭证更新的二进制 blob,以及具有任意更新的通用数据段。 通…