首页 > 解决方案 > 如果子数组中的条件,Mongo聚合删除组

问题描述

在我的管道的某个点,我有一个这样的结构:

[
    {
        _id: 1,
        elems1: [{sub : {date: xxx}}, {sub: {date: yyy}}],
        elems2: [{sub: {date: zzz}}, {sub: {date: qqq}}]
    },
    ...
]

来自一个分组:

{$group: {
    _id: '$user.id',
    elems1: {
        $push: {sub: '$other'}
        },
    elems2: {
        $push: {sub: '$other'}
        }
    }
}}

现在我想删除在elems1ORelems2中具有sub.date小于某个日期的元素的组,我该怎么做?

标签: mongodbaggregation-framework

解决方案


当您执行您的$group时,您还可以跟踪“minElemDate”,然后$match在下一个管道阶段进行跟踪。

$group: {
  _id: "$user.id",
  elem1s: ...,
  elem2s: ...
  minElemDate: {
    $min: {
      $cond: [
        { $or: [condition1, condition2] },
       "$user.date",
        null
      ]
    }
  }
},
{ $match: {$gte: ["$minElemDate", minDate]} }

推荐阅读