MongoDB聚合-如果提供的输入参数不匹配,则匹配输入参数

问题描述

我有一个MongoDB聚合查询,其中有以下内容

{ $match: { version: versionNumber }

'versionNumber'是对整合的可选输入参数。如果未提供此versionNumber,则我不希望执行此匹配。

当前,如果未提供versionNumber,则匹配仍然发生,并且我得到一个空白查询输出

蒙哥(Mongo)是否有办法做到这一点?谢谢!

解决方法

有一种方法可以做到,是的,但是应该在应用程序代码中完成。构建传递给查询的管道数组时,如果提供了必要的信息,则仅包括$match阶段。

var pipeline=[]
if (versionNumber) pipeline.push( {$match: {version: versionNumber }} )
pipeline.push( ... Other Stages ... )

db.collection.aggregate(pipeline)
,

我不确定versionNumber中的值在未提供时是什么(可选),假设versionNumber将是""undefined或{ {1}},

  • 如果null不可用,它将跳过,如果可用,则将符合versionNumebr条件
  • 您可以在数组$eq[null,"","undefined"]零或任何您想跳过的内容中添加更多值
0
  • 如果 { $match: { $expr: { $cond: [ { $in: [versionNumber,[null,"undefined"]] },true,{ $eq: ["$version",versionNumber] } ] } } } 始终是单个可能值versionNumebr,则可以使用""代替$eq
$in

Playground