在多表联合查询能力上,4.4 之前只提供了一个 $lookup stage 用于实现类似于 SQL 中的「left outer join」功能,在 4.4 中新增的 $unionWith stage 又提供了类似 SQL 中的「union all」功能,用户把两个集合中的数据聚合到一个结果集中,然后做指定的查询和过滤。区别于 $lookup stage 的是, $unionWith stage 支持分片集合。当在 Aggregate Pipeline 中使用了多个 $unionWith stage 的时候,可以对多个集合数据做聚合,使用方式如下:
{ $unionWith: { coll: "<collection>", pipeline: [ <stage1>, ... ] } }
假设我们现在有这样的数据:
db.orders_april.insertMany([
{ _id:1, item: "A", quantity: 100 },
{ _id:2, item: "B", quantity: 30 },
]);
db.orders_may.insertMany([
{ _id:1, item: "C", quantity: 20 },
{ _id:2, item: "A", quantity: 50 },
]);
db.orders_june.insertMany([
{ _id:1, item: "C", quantity: 100 },
{ _id:2, item: "D", quantity: 10 },
]);
现在我想知道orders_may,orders_june,orders_april这三个集合中,不同产品item的数量quantity总和是多少?
如果是以前,只能用代码来实现;现在可以:
db.orders_april.aggregate( [
{ $unionWith: "orders_may" },
{ $unionWith: "orders_june" },
{ $group: { _id: "$item", total: { $sum: "$quantity" } } },
{ $sort: { total: -1 }}
"_id" : "A",
"total" : 150.0
"_id" : "C",
"total" : 120.0
"_id" : "B",
"total" : 30.0
"_id" : "D",
"total" : 10.0
假设我们现在有这样的数据(site:1早餐,2中餐,3晚餐;placeId:地点ID;cateringDate:时间):
现在我想知道每天每个地方的早餐数,中餐数,晚餐数(即在一个集合中根据条件将多条数据合并成一条进行数据统计)?
db.catering.aggregate([
"$unionWith" : {
"coll" : "catering",
"pipeline" : [
"$match" : {
"site" : 1.0
"$addFields" : {
"breakfast" : 1.0,
"lunch" : 0.0,
"dinner" : 0.0
"$unionWith" : {
"coll" : "catering",
"pipeline" : [
"$match" : {
"site" : 2.0
"$addFields" : {
"breakfast" : 0.0,
"lunch" : 1.0,
"dinner" : 0.0
"$unionWith" : {
"coll" : "catering",
"pipeline" : [
"$match" : {
"site" : 3.0
"$addFields" : {
"breakfast" : 0.0,
"lunch" : 0.0,
"dinner" : 1.0
"$addFields" : {
"cateringDateString" : {
"$dateToString" : {
"format" : "%Y-%m-%d",
"date" : "$cateringDate",
"timezone" : "+08:00"
"$group" : {
"_id" : {
"date" : "$cateringDateString",
"placeId" : "$placeId"
"totalBreakfast" : {
"$sum" : "$breakfast"
"totalLunch" : {
"$sum" : "$lunch"
"totalDinner" : {
"$sum" : "$dinner"
"$project" : {
"date" : "$_id.date",
"placeId" : "$_id.placeId",
"totalBreakfast" : 1.0,
"totalLunch" : 1.0,
"totalDinner" : 1.0,
"_id" : 0.0
"$sort" : {
"date" : 1.0
在多表联合查询能力上,4.4 之前只提供了一个 lookupstage用于实现类似于SQL中的「leftouterjoin」功能,在4.4中新增的lookup stage 用于实现类似于 SQL 中的「left outer join」功能,在 4.4 中新增的lookupstage用于实现类似于SQL中的「leftouterjoin」功能,在4.4中新增的unionWith stage 又提供了类似 SQL 中的「union all」功能,用户把两个集合中的数据聚合到一个结果集中,然后做指定的查询和过滤。区
>>发布会传送门
了解产品详情
MongoDB 在今年正式发布了新的 4.4 大版本,这次的发布包含众多的增强 Feature,可以称之为是一个维护性的版本,而且是一个用户期待已久的维护性版本,MongoDB 官方也把这次发布称为「User-Driven Engineering」,说明新版本主要是针对用户呼声最高的一些痛点,重点进行了改进。
而阿里云作为 MongoDB 官方的全球战略合作伙伴,也即将全网独家上线 4.4 新版本,下面就由阿里云 MongoDB 团队的工程师针对一些用户关注度比
此篇文章及以后的文章大部分都是从聚合管道(aggregation pipeline)的一些语法为基础讲解的,如果不理解聚合管道的话,可以先学习一下会比较容易理解.
可以参考 mongoDB Documentation 的 Pipeline Aggregaion Stages.
何为Union All 和 ...
管道在Unix和Linux中一般用于将当前命令的输出结果作为下一个命令的参数。
MongoDB的聚合管道将MongoDB文档在一个管道处理完毕后将结果传递给下一个管道处理。管道操作是可以重复的。
表达式:处理输入文档并输出。表达式是无状态的,只能用于计算当前聚合管道的文档,不能处理其它的文档。
聚合框架中常用的几个操作:
$project:修改输入文档的结构。可以用来重命名、增加或删除
criteria:查询条件
objNew:update对象和一些更新操作符
upsert:如果不存在update的记录,是否插入objNew这个新的文档,true为插入,默认为false,不插入。
mult...
MongoDB中聚合(aggregate)主要用于处理数据(诸如统计平均值,求和等),并返回计算后的数据结果。有点类似sql语句中的count(*)。
>db.COLLECTION_NAME.aggregate(AGGREGATE_OPERATION)
集合中的数据格式:
"_id" : ObjectId("577e09da6a857a35563587c0")
//创建数据库链接
//在1.7的版本驱动中这样写是会报 MongoServer方法已过时的
//MongoServer server = MongoDB.Driver.MongoServer.Create(strconn);
//带有用户名,密码的如下写法,不带的则直接ip+端口就可以
const string connectionString = “mongodb://city:liyang@192.168.1.211:27017”;
//得到一个客户端对象的引用 GetServer()对服务器对象的引用
由于现在的公司用的不是mongodb,但是用mongodb用了那么多年;
它的变化本人也是时刻关注的;相比以前,可能没有实战了;只能自己demo;
本篇是基于mongodb中文官网,总结其自己感觉挺实用的特性;
并非揽括官方的所有特性;
Hidden Indexes
根据名称,我们就知道其作用是隐藏索引,为什么要隐藏索引呢?
我们都知道数据库太多索引会导致性能下降。但是业务的复杂性,导致我们是不敢乱删索引的;万一删除了,又得重建索
MongoDB是一种流行的开源文档数据库,它支持高性能和高可用性,适合处理海量数据。本文将介绍如何在Linux系统上安装MongoDB 4.4.13。
1. 下载MongoDB 4.4.13
首先,到MongoDB官网下载相应的版本。在命令行界面中使用wget命令可以快速下载。
```shell
wget https://fastdl.mongodb.org/linux/mongodb-linux-x86_64-4.4.13.tgz
2. 解压MongoDB安装包
下载完成后,使用tar命令解压MongoDB安装包。
```shell
tar xvzf mongodb-linux-x86_64-4.4.13.tgz
解压后,会在当前目录下生成一个mongodb-linux-x86_64-4.4.13目录,其中包含MongoDB的二进制文件和相关配置文件。
3. 配置环境变量
为了能够方便地在命令行中执行MongoDB程序,需要配置环境变量。
```shell
export PATH=mongodb-linux-x86_64-4.4.13/bin:$PATH
4. 启动MongoDB服务
在安装完MongoDB后,需要启动MongoDB服务。可以使用mongod命令启动MongoDB服务。
```shell
mongod
默认情况下,MongoDB会在/data/db目录下存储数据文件。如果需要使用不同的数据目录,可以使用--dbpath选项指定新的数据目录路径。
```shell
mongod --dbpath /path/to/data/directory
5. 使用MongoDB
MongoDB默认监听27017端口,可以使用mongo命令连接MongoDB并开始使用。
```shell
mongo
以上就是如何在Linux系统上安装MongoDB 4.4.13的简单介绍。安装MongoDB并不难,只要按照以上步骤执行即可。MongoDB的使用非常灵活,可以根据具体需求进行相应的配置和调整。