带有条件的MongoDB聚合查询

Posted

技术标签:

【中文标题】带有条件的MongoDB聚合查询【英文标题】:Mongodb aggregate query with condition 【发布时间】:2021-01-11 15:36:39 【问题描述】:

我必须在 python 中对 mongodb 执行聚合,但无法这样做。

下面是提取的mongodb文档结构:

'Category': 'Male',
 'details' :['name':'Sachin','height': 6,
             'name':'Rohit','height': 5.6,
             'name':'Virat','height': 5
            ]

我想通过聚合函数返回名称为 Sachin 的高度。基本上我的想法是通过 $match 应用条件提取数据并同时使用聚合函数进行聚合。这可以通过使用 if 语句分 3 个步骤轻松完成,但我希望在 1 个聚合函数中完成。

请注意:'details' 值没有固定长度。

如果需要更多解释,请告诉我。

【问题讨论】:

【参考方案1】:

你可以做一个$filter来实现

db.collection.aggregate([
  
    $project: 
      details: 
        $filter: 
          input: "$details",
          cond: 
            $eq: [
              "$$this.name",
              "Sachin"
            ]
          
        
      
    
  
])

工作Mongo playground

如果你在find中使用,但你需要注意positional operator

db.collection.find(
  "details.name": "Sachin"
,

  "details.$": 1
)

工作Mongo playground

如果您需要将其作为对象,您可以简单地使用$arrayElemAr$ifNull

【讨论】:

以上是关于带有条件的MongoDB聚合查询的主要内容,如果未能解决你的问题,请参考以下文章

mongoDB,带有 $sum 和 $count 的 mongoose 聚合查询

mongoDB,带有 $sum 和 $count 的 mongoose 聚合查询

MongoDB 轻松搞定统计 —— 聚合函数使用

MongoDB对HABTM关系(Mongoid,RoR)的条件聚合查询?

详细教程一文参透MongoDB聚合查询

是否可以在 mongodb 上聚合多个条件