0

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

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

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

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

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

4

2 回答 2

1

$match?

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

mongoplayground

于 2021-10-28T12:50:33.777 回答
1

将会

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

$filter用于从数组中删除元素,例如

{ $filter: { input: [ 1,2,3,4,5,6 ], cond: {$lt: ["$$this", 4] } } } => [1,2,3]
于 2021-10-28T13:14:26.950 回答