当前位置: 首页 > news >正文

Mongodb使用视图连接两个集合

您可以使用 $lookup 为两个集合创建一个视图,然后对该视图运行查询。应用程序可以查询视图,而无需构建或维护复杂的管道。

例子

创建两个样本集合 inventory 和 orders

db.inventory.insertMany( [{ prodId: 100, price: 20, quantity: 125 },{ prodId: 101, price: 10, quantity: 234 },{ prodId: 102, price: 15, quantity: 432 },{ prodId: 103, price: 17, quantity: 320 }
] )db.orders.insertMany( [{ orderId: 201, custid: 301, prodId: 100, numPurchased: 20 },{ orderId: 202, custid: 302, prodId: 101, numPurchased: 10 },{ orderId: 203, custid: 303, prodId: 102, numPurchased: 5 },{ orderId: 204, custid: 303, prodId: 103, numPurchased: 15 },{ orderId: 205, custid: 303, prodId: 103, numPurchased: 20 },{ orderId: 206, custid: 302, prodId: 102, numPurchased: 1 },{ orderId: 207, custid: 302, prodId: 101, numPurchased: 5 },{ orderId: 208, custid: 301, prodId: 100, numPurchased: 10 },{ orderId: 209, custid: 303, prodId: 103, numPurchased: 30 }
] )

创建连接视图

此命令使用 db.createView() 基于 orders 集合创建名为 sales 的新视图:

db.createView( "sales", "orders", [{$lookup:{from: "inventory",localField: "prodId",foreignField: "prodId",as: "inventoryDocs"}},{$project:{_id: 0,prodId: 1,orderId: 1,numPurchased: 1,price: "$inventoryDocs.price"}},{ $unwind: "$price" }
] )

在示例中:

  • $lookup 阶段使用 orders 集合中的 prodId 字段来“连接” inventory 集合中具有匹配 prodId 字段的文档。

  • 匹配的文档将作为数组添加到 inventoryDocs 字段中。

  • $project 阶段选择可用字段的子集。

  • $unwind 阶段会将 price 字段从数组转换为标量值。

sales 视图中的文档包括:

{ orderId: 201, prodId: 100, numPurchased: 20, price: 20 },
{ orderId: 202, prodId: 101, numPurchased: 10, price: 10 },
{ orderId: 203, prodId: 102, numPurchased: 5, price: 15 },
{ orderId: 204, prodId: 103, numPurchased: 15, price: 17 },
{ orderId: 205, prodId: 103, numPurchased: 20, price: 17 },
{ orderId: 206, prodId: 102, numPurchased: 1, price: 15 },
{ orderId: 207, prodId: 101, numPurchased: 5, price: 10 },
{ orderId: 208, prodId: 100, numPurchased: 10, price: 20 },
{ orderId: 209, prodId: 103, numPurchased: 30, price: 17 }

 查询视图

要查找每种产品的总销售量,请查询视图:

db.sales.aggregate( [{$group:{_id: "$prodId",amountSold: { $sum: { $multiply: [ "$price", "$numPurchased" ] } }}}
] )

输出见下:

[{ _id: 102, amountSold: 90 },{ _id: 101, amountSold: 150 },{ _id: 103, amountSold: 1105 },{ _id: 100, amountSold: 600 }
]

使用视图连接两个集合 — MongoDB 手册 v6.0

相关文章:

Mongodb使用视图连接两个集合

您可以使用 $lookup 为两个集合创建一个视图,然后对该视图运行查询。应用程序可以查询视图,而无需构建或维护复杂的管道。 例子 创建两个样本集合 inventory 和 orders: db.inventory.insertMany( [{ prodId: 100, price: 20, quantity: 1…...

SIP是什么?

SIP(Session Initiation Protocol,会话启动协议)是一个用于建立、更改和终止多媒体会话的应用层控制协议,其中的会话可以是IP电话、多媒体会话或多媒体会议。 SIP是IETF多媒体数据和控制体系结构的核心协议(最新RFC文档…...

Day 39 || 01背包、416. 分割等和子集

01背包 题目链接:卡码网第46题 二维解题思路:需要建立一个i行k列的dp数组,i表示每个物品,k代表容量,初始化数组子一列为0,第一行从背包开始能够放入起始为价值,其他都为0。for双循环先背包后物…...

调用detr-resnet-50进行目标检测

from transformers import DetrImageProcessor, DetrForObjectDetection import torch from PIL import Imageimage = Image.open("1.jpg") torch.set_default_device("cuda"...

Chromium 中chrome.fontSettings扩展接口定义c++

一、chrome.fontSettings 使用 chrome.fontSettings API 管理 Chrome 的字体设置。 权限 fontSettings 要使用 Font Settings API,您必须在扩展程序中声明 "fontSettings" 权限 清单。例如: {"name": "My Font Settings E…...

在Unity游戏开发在面试时会面试哪些内容?

1、请描述游戏动画有几种,以及其原理。 关键帧动画:每一帧动画序列当中包含了顶点的空间位置信息以及改变量,然后通过插值运算,得出动画效果。选中某一游戏对象,创建animation,添加属性Transform&#xff0…...

刘艳兵-DBA022-以下关于Oracle半连接的描述,哪些是正确的?

以下关于Oracle半连接的描述,哪些是正确的? A SQL中的NOT EXISTS子查询,通常会被转换为对应的半连接。 B SQL中的IN子查询,通常会被转换为对应的半连接。 C 半连接会去重 D SQL中的EXISTS子查询,通常会被转…...

人工智能与伦理:我们应该如何平衡科技与人性?

内容概要 在这个瞬息万变的时代,人工智能的迅猛发展让我们面对前所未有的伦理困境。科技进步带来了便利,但同时也亟需我们反思如何对待人性。尤其是在实现算法透明性时,我们要确保每一个决策背后都能被理解与追溯,这不仅是对技术…...

CRON组件一个复杂的一个简单的

CRON组件一个复杂的一个简单的 一个是复杂点的一个是简单点。 1.以简单的为例使用&#xff1a; 父组件 import CronSimple from "/views/xxx/components/cron-simple/index.vue";components: {CronSimple}<el-dialog title"调度CRON"v-if"cronV…...

自定义日志打成jar包引入项目后不生效

背景&#xff1a;写了一个请求响应日志包&#xff0c;打包后在另一个项目使用pom引入后不生效 package com.example.qqllog.aspect;import org.springframework.boot.autoconfigure.condition.ConditionalOnMissingBean; import org.springframework.context.annotation.Bean;…...

RK3568平台开发系列讲解(中断篇)延迟工作实验

🚀返回专栏总目录 文章目录 一、什么是延迟工作二、 struct delayed_work三、延迟工作相关接口函数3.1、初始化延迟工作函数3.2、调度/取消调度 延迟工作函数四、驱动程序编写沉淀、分享、成长,让自己和他人都能有所收获!😄 一、什么是延迟工作 延迟工作是一种将工作的执…...

RabbitMQ 的集群

大家好&#xff0c;我是锋哥。今天分享关于【RabbitMQ 的集群】面试题&#xff1f;希望对大家有帮助&#xff1b; RabbitMQ 的集群 RabbitMQ 是一种流行的开源消息代理&#xff0c;广泛用于构建分布式系统中的消息队列。随着应用程序规模的扩大&#xff0c;单一的 RabbitMQ 实…...

整车功能架构 --- 智能座舱

我是穿拖鞋的汉子&#xff0c;魔都中坚持长期主义的汽车电子工程师。 老规矩&#xff0c;分享一段喜欢的文字&#xff0c;避免自己成为高知识低文化的工程师&#xff1a; 所有人的看法和评价都是暂时的&#xff0c;只有自己的经历是伴随一生的&#xff0c;几乎所有的担忧和畏惧…...

java stream流的使用

Java中的Stream API是Java 8引入的一个重要特性&#xff0c;它提供了对集合对象进行各种非常便利、高效的聚合操作&#xff08;aggregate operation&#xff09;或大批量数据操作&#xff08;bulk data operation&#xff09;。Stream API借助于Lambda表达式&#xff0c;极大地…...

(JVM)带你一起研究JVM的语法糖功能 和 JVM的即时编译器

1. 语法糖 所谓的语法糖&#xff0c;其实就是指java编译器把*.java源码编译为*.class字节码的过程中&#xff0c;自动生成和转换的一些代码&#xff0c;主要是为了减轻程序员的负担&#xff0c;算是java编译器给我们第一个额外福利 以下代码的分析&#xff0c;借助了javap工具…...

【Linux】ClickHouse 部署

搭建Clickhouse集群时&#xff0c;需要使用Zookeeper去实现集群副本之间的同步&#xff0c;所以需要先搭建zookeeper集群 1、卸载 # 检查有哪些clickhouse依赖包&#xff1a; [rootlocalhost ~]# yum list installed | grep clickhouse# 移除依赖包&#xff1a; [rootlocalho…...

js的小知识

以下是一些 JavaScript 的小知识点&#xff0c;适合不同水平的开发者&#xff1a; 1. 变量声明 使用 let、const 和 var 声明变量。let 和 const 块级作用域&#xff0c;而 var 是函数作用域。const 声明的变量不可重新赋值&#xff0c;但对象的属性仍然可以修改。 2. 箭头函…...

一些swift问题

写得比较快&#xff0c;如果有问题请私信。 序列化和反序列化 反序列化的jsonString2只是给定的任意json字符串 private func p_testDecodeTable() {let arr ["recordID123456", "recordID2"]// 序列化[string] -> json datalet jsonData try? JSO…...

Nginx安装配置详解

Nginx Nginx官网 Tengine翻译的Nginx中文文档 轻量级的Web服务器&#xff0c;主要有反向代理、负载均衡的功能。 能够支撑5万的并发量&#xff0c;运行时内存和CPU占用低&#xff0c;配置简单&#xff0c;运行稳定。 写在前 uWSGI与Nginx的关系 1. 安装 Windows 官网 Stabl…...

汽车免拆诊断案例 | 2010款起亚赛拉图车发动机转速表指针不动

故障现象  一辆2010款起亚赛拉图车&#xff0c;搭载G4ED 发动机&#xff0c;累计行驶里程约为17.2万km。车主反映&#xff0c;车辆行驶正常&#xff0c;但组合仪表上的发动机转速表指针始终不动。 故障诊断  接车后进行路试&#xff0c;车速表、燃油存量表及发动机冷却温度…...

3步实现风扇智能控制:Windows系统散热与噪音平衡全指南

3步实现风扇智能控制&#xff1a;Windows系统散热与噪音平衡全指南 【免费下载链接】FanControl.Releases This is the release repository for Fan Control, a highly customizable fan controlling software for Windows. 项目地址: https://gitcode.com/GitHub_Trending/f…...

3个步骤打造全方位网络电台体验:foobox-cn配置指南

3个步骤打造全方位网络电台体验&#xff1a;foobox-cn配置指南 【免费下载链接】foobox-cn DUI 配置 for foobar2000 项目地址: https://gitcode.com/GitHub_Trending/fo/foobox-cn 在数字音乐时代&#xff0c;如何高效管理和收听网络电台成为音乐爱好者的核心诉求。网络…...

OpenClaw与Qwen3-VL:30B:高效个人AI办公助手实战

OpenClaw与Qwen3-VL:30B&#xff1a;高效个人AI办公助手实战 1. 为什么选择OpenClawQwen3-VL组合 去年冬天&#xff0c;当我第5次因为会议记录整理到凌晨两点时&#xff0c;终于决定寻找自动化解决方案。在尝试了市面上各种RPA工具后&#xff0c;偶然发现了OpenClaw这个开源框…...

从潍坊一中赛题看算法竞赛中的数据类型陷阱与优化策略

1. 数据类型陷阱&#xff1a;从潍坊一中T1赛题看数值溢出问题 第一次参加算法竞赛的同学&#xff0c;90%都会在数据类型上栽跟头。就拿潍坊一中T1"揽月湖"这道题来说&#xff0c;表面是简单的数学表达式计算&#xff0c;实则是数据类型选择的经典案例。题目要求计算3…...

8.3ES-OAS-ERP-电子政务-企业信息化

一、专家系统 &#xfeff;00:00 定义&#xff1a;基于知识的专家系统是人工智能的重要分支&#xff0c;其能力来源于专家知识&#xff0c;通过知识表示和推理方法实现应用。与传统程序区别&#xff1a; 属于AI范畴&#xff0c;解决半结构化/非结构化问题模拟专家推理而非问题本…...

解锁7大加密场景:Cryptii离线工具全攻略

解锁7大加密场景&#xff1a;Cryptii离线工具全攻略 【免费下载链接】cryptii Web app and framework offering modular conversion, encoding and encryption 项目地址: https://gitcode.com/gh_mirrors/cr/cryptii 在数字化时代&#xff0c;数据安全与格式转换成为开发…...

Qt+OpenCV+海康SDK实战:多线程回调架构下的实时视频流解码与Mat转换全流程解析

1. 项目背景与核心挑战 在智能安防和视频监控领域&#xff0c;实时视频流处理一直是技术难点。传统方案往往面临三个关键问题&#xff1a;视频流延迟高、解码效率低下、跨平台兼容性差。这正是我们选择QtOpenCV海康SDK技术栈的原因——Qt提供跨平台GUI支持&#xff0c;OpenCV负…...

ESLint-Plugin-React 终极配置指南:如何创建适合不同团队的个性化规则组合

ESLint-Plugin-React 终极配置指南&#xff1a;如何创建适合不同团队的个性化规则组合 【免费下载链接】eslint-plugin-react React-specific linting rules for ESLint 项目地址: https://gitcode.com/gh_mirrors/es/eslint-plugin-react ESLint-Plugin-React 是一个专…...

避坑指南:uniapp调用支付宝授权时常见的5个错误及解决方案

Uniapp支付宝授权实战&#xff1a;5个高频错误与深度解决方案 移动应用开发中&#xff0c;第三方授权登录是提升用户体验的关键环节。作为国内主流支付平台&#xff0c;支付宝授权在电商、生活服务类App中应用广泛。但许多Uniapp开发者在实现支付宝授权功能时&#xff0c;总会遇…...

低门槛AI视频生成新选择:opensora-hpcai本地部署与优化指南

低门槛AI视频生成新选择&#xff1a;opensora-hpcai本地部署与优化指南 【免费下载链接】opensora-hpcai-1_0_ms MindSpore implementation of OpenSora, an open-source project that aims to foster innovation, creativity, and inclusivity within the field of content cr…...