微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

MongoDB:当汇总中不存在匹配条件时,如何在$ facet中将$ count默认为0

如何解决MongoDB:当汇总中不存在匹配条件时,如何在$ facet中将$ count默认为0

我正在处理一个复杂的分页聚合查询,我正在尝试查看Mongo是做什么和不能做什么。我遵循了这个问题here,除了没有返回数据时,所有其他方法都工作正常。

Mongo返回:{ Metadata: [],data: [] },但我想看看是否有可能返回

{ Metadata: [ { count: 0 } ],data: [] }

使前端更容易处理。到目前为止,我还无法实现这一目标。

这是我正在使用的 $ facet管道摘要

{
  "$facet": {
    "Metadata": [{
      "$count": "total"
    }],"data": [{
      "$skip": 0
    },{
      "$limit": 10
    }]
  }
}

这当然可以在后端查询之后完成,但是我真的希望Mongo能够处理它。

解决方法

您可以在最后检查条件,

  • $addFields检查$cond是否metadata数组大小为零,然后返回总数为零的静态数组,否则返回原始元数据数组
  // <= skipping your pipelines
  {
    $addFields: {
      metadata: {
        $cond: [
          { $eq: ["$metadata",[]] },[{ total: 0 }],"$metadata"
        ]
      }
    }
  }

Playground


$switch大小写运算符的其他选项,

  • $switch检查第一种情况是否metadata等于[],然后返回总数为零,并在default中返回原始metadata数组
  {
    $addFields: {
      metadata: {
        $switch: {
          branches: [
            {
              case: { $eq: ["$metadata",then: [{ total: 0 }]
            }
          ],default: "$metadata"
        }
      }
    }
  }

Playground

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。