我想编写一个 MongoDB 聚合查询来执行以下操作:
例如: 我将 companyName 作为变量传递,如果它不为空,我将获取该公司名称的记录,否则,如果它为空,我将获取所有公司名称的记录。
我想出了这样的东西:(匹配是更大的聚合查询的一部分)
{ $match : { $and: [ { ?0: { $ne : null }} , {'companyName' : ?0}] }}
List<AggregationGroupSum> getCountByCompany(String companyName)
?0
是变量companyName。
我知道检查它的方法相当幼稚,但我对 MongoDB 和聚合查询很陌生,我希望获得有关如何解决此问题的任何帮助,无论是通过聚合还是其他方式。
谢谢!
您应该使用
$or
运算符而不是 $and
。
这将满足:
如果
?0
为空,则选择该文档。
如果
?0
与 companyName
值匹配,则选择该文档。
{
$match: {
$expr: {
$or: [
{ $eq: [?0, null] },
{ $eq: ["$companyName", ?0] }
]
}
}
}