MongoDB 聚合 - 如果变量不为空则匹配

问题描述 投票:0回答:1

我想编写一个 MongoDB 聚合查询来执行以下操作:

  1. 我将一个变量传递给查询方法。
  2. 如果变量不为空,我想检查它是否匹配。
  3. 如果变量为null,则不需要匹配

例如: 我将 companyName 作为变量传递,如果它不为空,我将获取该公司名称的记录,否则,如果它为空,我将获取所有公司名称的记录。

我想出了这样的东西:(匹配是更大的聚合查询的一部分)

{ $match : { $and: [ { ?0: { $ne : null }} , {'companyName' : ?0}] }}

List<AggregationGroupSum> getCountByCompany(String companyName)

?0
是变量companyName。

我知道检查它的方法相当幼稚,但我对 MongoDB 和聚合查询很陌生,我希望获得有关如何解决此问题的任何帮助,无论是通过聚合还是其他方式。

谢谢!

java mongodb mongodb-query aggregation-framework
1个回答
1
投票

您应该使用

$or
运算符而不是
$and

这将满足:

  1. 如果

    ?0
    为空,则选择该文档。

  2. 如果

    ?0
    companyName
    值匹配,则选择该文档。

{
  $match: {
    $expr: {
      $or: [
        { $eq: [?0, null] },
        { $eq: ["$companyName", ?0] }
      ]
    }
  }
}

© www.soinside.com 2019 - 2024. All rights reserved.