问题描述
{ $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