MongoDB Aggregation-如果变量不为null,则匹配



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

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

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

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

{ $match : { $and: [ { ?0: { $ne : null }} , {'companyName' : ?0}] }}
List<AggregationGroupSum> getCountByCompany(String companyName)

?0是变量companyName。

我知道检查它的方法很幼稚,但我是MongoDB和聚合查询的新手,我希望得到任何关于如何解决这个问题的帮助,无论是通过聚合还是其他方式。

谢谢!

您应该使用$or运算符而不是$and

这将实现:

  1. 如果?0为空,则选择文档。

  2. 如果?0companyName值匹配,则选择文档。

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

最新更新