首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >没有选择场景的多选择过滤器的MongoDB查询

没有选择场景的多选择过滤器的MongoDB查询
EN

Stack Overflow用户
提问于 2021-08-31 02:56:51
回答 1查看 125关注 0票数 0

我在一个web应用程序的前端有过滤器,其中大多数是多选择过滤器。

我正在尝试编写一个mongo聚合查询,它处理两种场景。

  1. 用户从多选择下拉筛选器中选择值.查询将获取所选值并将相关数据返回给客户端。
  2. A用户不会从多选择下拉筛选器中选择任何内容。在这种情况下,查询应该返回所有数据.

查询应该如下所示。显然,下面的查询不起作用。

代码语言:javascript
复制
db.hospitals.aggregate([
    {
        $match: {
            hosp_name: {
                $cond: {
                    if: {
                        $in: [""]
                    }, then: "*", else: $in: ["ABC Hospital", "DEF Hospitals"] }
                }
            }
        }
    },
    {
        $group: {
            _id: {
                "IP/OP": "$ip_op"
            }
        }
    }
])

在这里,在条件块中,我试图表达以下意思:

如果用户不选择医院名称中的任何值

如何正确构造此查询?

编辑:

我也尝试过$or条件。虽然它是有效的,但它显示的是没有选择的情况下的空结果。结果不符合我的设想。我知道我错过了什么。

代码语言:javascript
复制
db.hospital_baseline.aggregate([
    {
        $match: {
            $or: [{hospital_name: {$in: [""]}}, {hospital_name: {$in: ["ABC Hospital"]}}]
        }
    },
    {
        $group: {
            _id: {
                "Manufacturer Name": "$manufacturer_name"
            }
        }
    }
])
EN

回答 1

Stack Overflow用户

发布于 2021-08-31 06:49:27

我认为您需要在代码中以编程方式构建查询,首先检查select数组:

如果

  • 为空,那么您的聚合将仅为$group阶段,如果不为空,则没有任何匹配条件的
  • ,这意味着有一个选择,则对于所选项和$group阶段,聚合将是$match阶段。
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/68992327

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档