首页 > 解决方案 > 如果聚合内的 mongodb 匹配不返回任何内容,如何进行新查询?

问题描述

我使用 match 从集合中选择一些文档,然后输出除找到的文档之外的所有其他文档。如果 match 没有找到任何文档,那么我需要显示集合中的所有可用文档。如何才能做到这一点?

标签: mongodb

解决方案


如果没有示例,我不知道我是否理解正确,但是您可以尝试此聚合查询(或将此聚合阶段添加到您的查询中)。

ide 使用$facet创建两种方式:

  • 第一种方式:匹配值
  • 第二种方式:获取一切

并使用和$project输出这些选项之一。 如果以“存在方式”返回的数组为 0(任何结果),则为(即所有值),否则为值。$cond$size
$projectresultno_existsexists

db.collection.aggregate([
  {
    "$facet": {
      "exists": [
        {
          "$match": {
            // your match
          }
        }
      ],
      "no_exists": []
    }
  },
  {
    "$project": {
      "result": {
        "$cond": {
          "if": {
            "$eq": [
              {
                "$size": "$exists"
              },
              0
            ]
          },
          "then": "$no_exists",
          "else": "$exists"
        }
      }
    }
  }
])

此处示例值存在且仅输出值,此处示例不存在并输出所有集合。


推荐阅读