条件 Mongo 过滤器

Posted

技术标签:

【中文标题】条件 Mongo 过滤器【英文标题】:Conditional Mongo Filter 【发布时间】:2021-11-20 03:15:36 【问题描述】:

我只在用户希望根据标准过滤时才考虑过滤。

我可以使用 $in 很好地过滤,但是当 $in 过滤器中使用的条件没有提供时,它会抱怨它需要一个数组。用 [] 替换它会导致它返回为空,并且我没有要插入的所有可能值的列表(并且不确定我是否想要)

有什么想法吗?下面的颜色是可选标准。 *如果有一个我可以使用的跳过标志会很好。

 const profiles = await Profile.aggregate([
      
        $geoNear: 
          ...geoFilter,
        ,
      ,
      
        $match: 
          $and: [
            
              _id: 
                $ne: Profile.castID(req.user.profileID),
              ,
              colors:  $in: colors ,
            ,
          ],
        ,
      ,
       $skip: skip ,
       $limit: limit ,
    ]);

【问题讨论】:

【参考方案1】:

使用这个:

var match =  _id: $ne: Profile.castID(req.user.profileID) ;
if (typeof colors != "undefined") 
   match.colors =  $in: colors ;


Profile.aggregate([
  
    $geoNear: 
      ...geoFilter,
    ,
  ,
   $match: match ,
   $skip: skip ,
   $limit: limit ,
]);          

您不需要$and,但是如果您有需要使用它的情况

var match = [ _id: $ne: Profile.castID(req.user.profileID) ];
if (typeof colors != "undefined") 
   match.push(colors:  $in: colors );


Profile.aggregate([
  
    $geoNear: 
      ...geoFilter,
    ,
  ,
   $match: $and: match,
   $skip: skip ,
   $limit: limit ,
]);          

【讨论】:

以上是关于条件 Mongo 过滤器的主要内容,如果未能解决你的问题,请参考以下文章

mongoDB应用篇-mongo聚合查询

使用 Mongo 模板在 Spring Boot 中过滤内部 Arraylist 项的 Mongo 查询

如何在(Jasper Studio)的 mongo DB 查询中制作动态/可选过滤器(参数)

javascript Mongo命令用于过滤引用计数

Mongo Change Stream给我收藏的所有更改?

GeoSpatial 查询在 mongo shell 中工作,但在 C# 驱动程序中没有过滤