如何过滤mongodb聚合中的主数组

Posted

技术标签:

【中文标题】如何过滤mongodb聚合中的主数组【英文标题】:How to filter the main array in mongodb aggregation 【发布时间】:2021-12-13 15:19:43 【问题描述】:

想象一个数组进入聚合管道的一个步骤,如下所示:

[
  name: "John",
  address:  zip: 1111 
,
  name: "Doe",
  address:  zip: 2222 
]

那么,现在如果我想过滤所有 address.zip:2222 的对象,那么聚合阶段会是什么样子?我对文档有点困惑,因为它只显示了在子数组中实现 $filter 以过滤子数组本身中的项目的方法。

我知道如果我只使用 find() 函数就可以实现这一点,但这里的问题是上一阶段的,事情是动态生成的,所以我需要找到一种方法在聚合本身中过滤它。

非常感谢您对此提供的任何帮助。谢谢!

【问题讨论】:

你的测试数据和预期结果是什么 【参考方案1】:

$match?

db.collection.aggregate([
  
    "$match": 
      address: 
        zip: 2222
      
    
  
])

mongoplayground

【讨论】:

【参考方案2】:

db.collection.aggregate([
  
    "$match": 
      "address.zip": 2222
    
  
])

$filter 用于从 Array 中移除元素,例如

 $filter:  input: [ 1,2,3,4,5,6 ], cond: $lt: ["$$this", 4]    => [1,2,3]

【讨论】:

您好,我需要澄清一下。我可以使用这样的东西: $eq : [ temperature , 'pve' ] 来比较 $fitler 中的两个外部变量。但是我们不能用 $match 来做到这一点,因为我们不能在 $match 中使用像 $eq 这样的运算符。无论如何我可以比较 $match 中的外部变量值吗? 你的意思是 $eq : [ "$temperature" , 'pve' ] 不,温度作为 js 变量。 那么 $eq : [ temperature , "$pve" ] ?如果没有任何样本输入数据,很难猜测。

以上是关于如何过滤mongodb聚合中的主数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Mongodb 中对多个数组使用聚合映射和过滤器

Mongodb 使用聚合框架过滤深度嵌套的数组

Mongodb聚合数组大小大于匹配[重复]

Mongodb聚合数组大小大于匹配[重复]

mongodb Aggregation聚合操作之$facet

$eq 内部过滤器不适用于数组字段 - Mongodb