Loading [MathJax]/jax/input/TeX/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >查询具有创建根的子元素的Mongo聚合

查询具有创建根的子元素的Mongo聚合
EN

Stack Overflow用户
提问于 2021-06-14 05:38:54
回答 1查看 341关注 0票数 1

我有一个在后端生成的查询,在这个项目中,路径是基于根元素构建的。

代码语言:javascript
运行
AI代码解释
复制
{
  data: [
    {
      $project: {
        'Source.Code': {
          $ifNull: [
            '$Source.Code',
            '$$REMOVE'
          ]
        },
        'Source.Description': {
          $ifNull: [
            '$Source.Description',
            '$$REMOVE'
          ]
        },
        'Source._id': {
          $ifNull: [
            '$Source._id',
            '$$REMOVE'
          ]
        }
      }
    }
  ]
}

上面是投影,如您所见,源是基于Source文档中的字段创建的。我的问题是,就像我在子字段中所做的那样,我想检查Source上的Source,如果根本没有文档,就删除它。有点像

代码语言:javascript
运行
AI代码解释
复制
      {
        'Source': {
          $ifNull: [
            '$Source',
            '$$REMOVE'
          ]
        }

我不知道如何在聚合中构建这样的查询。在这里,Source是一个对象,它有多个字段,我希望在Source上检查null,如果它不是null,那么检查它的所有字段,并相应地添加到Source中。

代码语言:javascript
运行
AI代码解释
复制
{
Source: {
    Code: "Code",
    Description: "test",
    _id: "SomeID"
  }
}

如果描述为空,那么

代码语言:javascript
运行
AI代码解释
复制
{
Source: {
    Code: "Code",
    _id: "SomeID"
  }
}

编辑1:

现在,我想添加一个例子,其中我有一个对象源,它有可以被翻译的字段。我所说的可译的意思是,它们是i18n字段,其中包含语言字段。因此,请考虑下面的示例

代码语言:javascript
运行
AI代码解释
复制
{
Source: {
    Code: "Code",
    Description: {
       "en":"test",
       "fr": "testfr",
       "def": "test"
},
    _id: "SomeID"
  }
}

所以从我之前的查询来看

代码语言:javascript
运行
AI代码解释
复制
{
  data: [
    {
      $project: {
        'Source.Code': {
          $ifNull: [
            '$Source.Code',
            '$$REMOVE'
          ]
        },
        'Source.Description': {
          $ifNull: [
            '$Source.Description.en',
            '$$REMOVE'
          ]
        },
        'Source._id': {
          $ifNull: [
            '$Source._id',
            '$$REMOVE'
          ]
        }
      }
    }
  ]
}

因此,Source.Description.en会将.en附加到路径中,以便从描述中获取en。如何更改此边缘情况的查询?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2021-06-14 05:53:26

  • $objectToArraySource对象转换为数组键值格式
  • 按值迭代上述转换数组的循环和筛选器的$filter不是空的。
  • $arrayToObject将键值转换回对象。
  • $addFieldsdesscription获取en
  • $cond来检查它的空对象,然后删除,否则返回
代码语言:javascript
运行
AI代码解释
复制
db.collection.aggregate([
  {
    $project: {
      Source: {
        $arrayToObject: {
          $filter: {
            input: { $objectToArray: "$Source" },
            cond: { $ne: ["$$this.v", null] }
          }
        }
      }
    }
  },
  { $addFields: { "Source.Description": "$Source.Description.en" } },
  {
    $project: {
      Source: {
        $cond: [{ $eq: ["$Source", {}] }, "$$REMOVE", "$Source"]
      }
    }
  }
])

游乐场

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67971308

复制
相关文章
Mongo散记–聚合(aggregation)& 查询(Query)
工作中使用到Mongo,可是没有系统的学习研究过Mongo,仅对工作过程中,在Mongo的使用过程中的一些知识点做一下记录,并随时补充,达到总结备忘的目的。
全栈程序员站长
2022/07/12
2.5K0
Mongo聚合分析命令浅析
在很多时候,我们需要临时统计下数据库中的数据,一般的做法是写一个脚本,通过代码来统计分析。 在mongo中,其实可以直接使用命令就可以实现,主要得益于其非常强大的统计命令支撑。
tunsuy
2023/09/24
2580
Mongo聚合分析命令浅析
Mongo查询语句
db.qiche.find({"trasferStatus":{$ne:1}}).count(); db.qiche.find({}).count(); 120.27.195.31
week
2018/08/24
1.2K0
领域驱动设计之聚合与聚合根
对实体与值对象等进行关联设计后,就应该进行聚合的划分以及聚合根的确定。 首先我们需要明确为什么需要进行聚合的划分? 原来我们的系统对领域划分的最小单位通常是模块,比如客户信息管理模块、雇员信息管理模块。但模块的划分对于设计来说,还是显得粒度太粗。 一.聚合与聚合根 1.定义了对象之间清晰的关系和边界,并实现领域模型的内聚。我的理解是:一个聚合内的对象才具有强关联,对象的关联设计应该是针对一个聚合中的实体与实体或实体与值对象之间。(比如一个下订单的领域中,订单(实体)、订单项(实体)以及订单状态(值对象)应该
用户1910585
2018/05/11
2.9K0
mongo 慢查询配置
首先满查询针对的不一定是查询,增删改查都包括,因此,可以理解为一个事务的时间只有超过我们设定的时间(比如100ms)才会打印到mongo日志中,即(master.log,slave.log)。
全栈程序员站长
2022/08/09
1.3K0
子查询与子查询的分类(一)
在 SQL 中,子查询是一个查询嵌套在另一个查询中的查询,也被称为内部查询。子查询可以用来创建更复杂的查询,从而实现更高级的数据检索和分析。
堕落飞鸟
2023/05/10
1.9K0
SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
分组中也可以加入筛选条件WHERE,不过这里一定要注意的是,执行顺序为:WHERE过滤→分组→聚合函数。牢记!
_DIY
2020/05/29
5.2K0
SQL语句汇总(三)——聚合函数、分组、子查询及组合查询
子查询与子查询的分类(二)
子查询可以嵌套在 SELECT、FROM、WHERE 和 HAVING 子句中,以实现更复杂的数据检索和分析。在使用子查询时,需要注意以下几点:
堕落飞鸟
2023/05/10
1.6K0
一次关于聚合根的激烈讨论
之前有同事在分享DDD在闲鱼商品详情页的实践时,大家对闲鱼团队领域建模关于商品详情页的聚合根建模表示不认同。
方丈的寺院
2019/08/05
6930
一次关于聚合根的激烈讨论
【mongo 系列】聚合知识点梳理
https://docs.mongodb.com/manual/aggregation/
阿兵云原生
2023/02/16
3.7K0
JavaScript动态设置根元素的rem
说到rem自然就会想到em,我们知道em是相对于父元素的字体大小的单位,那么rem则是相对于根元素也就是元素的字体大小的单位。
刘亦枫
2020/03/19
4.4K0
java mongo 查询统计 distinct
CommandResult result = mongoTemplate.getDb().command(
艳艳代码杂货店
2021/10/27
1K0
mysql的查询、子查询及连接查询
一、mysql查询的五种子句 where(条件查询)、having(筛选)、group by(分组)、order by(排序)、limit(限制结果数) 1、where常用运算符: 比较运算符 > , < ,= , != (< >),>= , <= in(v1,v2..vn) between v1 and v2 在v1至v2之间(包含v1,v2) 逻辑运算
java达人
2018/01/31
12.8K0
Rafy 中的 Linq 查询支持(根据聚合子条件查询聚合父)
为了提高开发者的易用性,Rafy 领域实体框架在很早开始就已经支持使用 Linq 语法来查询实体了。但是只支持了一些简单的、常用的条件查询,支持的力度很有限。特别是遇到对聚合对象的查询时,就不能再使用 Linq,而只能通过构造底层查询树的接口来完成了。由于开发者的聚合查询的需求越来越多,所以本周我们将这部分进行了增强。 接下来,本文将说明 Rafy 框架原来支持的 Linq 语法,以及最新加入的聚合查询支持及用法。 使用 Linq 查询的代码示例 public WarehouseList GetByCod
用户1172223
2018/01/29
2.9K0
快速获取子图根节点的属性
•一、问题背景•二、构建样例多子图数据•三、实现根节点的属性查找•四、将子图查找的GQL封装为一个函数•五、总结
马超的博客
2022/09/02
2.5K0
快速获取子图根节点的属性
ES 基于查询结果的聚合
在了解本文内容前,必须先了解ES DSL查询和ES 聚合查询,ES基于查询结果的聚合分为两种,第一种类似与关系型数据库中的Having语法,第二种类似于关系型数据库中先where在group by的语法,本文主要分析先查询后聚合场景
郑小超.
2022/09/21
1.5K0
Mongo字符串类型的数值查询---$Where查询介绍
​        在Mongo中都知道字符串类型大小比较都是以ASCII进行比较的,所以无法真实比较字符串类型的数值大小
莫问今朝
2018/08/31
2.8K0
Mongo字符串类型的数值查询---$Where查询介绍
领域驱动设计之聚合与聚合根实例一
通过一个实例来说明如何划分聚合与聚合根 场景:一个下订单的业务,一个订单必须有相应的客户信息,订单下有订单项,每个订单项必须有相应的产品信息,产品有分类的信息。 1.根据这个基本的需求,我们初步确定的
用户1910585
2018/05/11
2.1K0
ES的常用查询与聚合
基于es 5.4和es 5.6,列举的是个人工作中经常用到的查询(只是工作中使用的是Java API),如果需要看完整的,可以参考官方相关文档 https://www.elastic.co/guide/en/elasticsearch/reference/5.4/search.html。
阿泽
2019/09/24
6.5K0
ES的常用查询与聚合
DDD - 聚合与聚合根_如何理解 Respository与DAO
通常情况,我们都会面临这样的一个问题: 架构图说的是一回事,代码说的却是另一回事 。 当然了这里面的影响因素很多,有一个原因就是某些约束没有在设计中体现出来,也就是说设计的表现力不够 , 而这些约束需要阅读代码才能够知道,这就增加了理解和使用这个组件的难度。
小小工匠
2022/01/12
9690
DDD - 聚合与聚合根_如何理解 Respository与DAO

相似问题

聚合根的引用子元素?

13

Mongo子字段上的聚合查询

112

DDD:查询聚合根的子对象

23

Mongo聚合添加到子元素

10

具有聚合函数的子查询

12
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档