我想投影一个集合,仅当某个字段在某个范围内时才应用导出值.

某种程度上:

db.workouts.aggregate({
 $match: { user_id: ObjectId(".....") }
},
{
 $project: { 
        '20': { $cond: [ {$gt: [ "$avg_intensity", 20]} , '$total_volume', 0] }
    }    
 })

我只需要在平均强度在一定范围内时才能得到这个值.然后,我将根据投影结果进行分组和求和.

我试图做的是应用$gt和$lt过滤器,但没有太大成功.

db.workouts.aggregate(
{
   $match: { user_id: ObjectId("....") }
},
{
$project: { 
        '20': { $cond: [ [{$gt: [ "$avg_intensity", 20]}, {$lt: [ "$avg_intensity", 25]}] ,    '$total_volume', 0] }
    }    
 })

我如何应用$gt和$lt条件?

推荐答案

要在$cond运算符下组合逻辑条件,然后用$and运算符包装这些条件:

db.workouts.aggregate([
    { "$match": { "user_id": ObjectId("....") }},
    { "$project": { 
       "20": { "$cond": [
           { "$and": [ 
               { "$gt": [ "$avg_intensity", 20 ] },
               { "$lt": [ "$avg_intensity", 25 ] }
           ]},    
           "$total_volume", 
           0
       ]}
   }}
])

Mongodb相关问答推荐

MongoDB(Mongoose)条件判断没有像我预期的那样工作

从MongoDB中的一个非空字段获取值

将消息流式传输到WebSocket

在mongdob中按子文档筛选不起作用

根据参考图计算子文档列表的最大值

聚合管道可以用于更新数据库中的文档吗?

使用特定关键字和邻近度进行查询和过滤

优化游戏应用程序的反馈表单后端设计

Mongodb聚合中基于其他字段值的多个条件的动态新字段值

使用 $addFields 将字段添加到 $lookup 结果中的每个项目

MongoDB 查询以包含多个字段的最常见值的计数

为什么使用整数作为 pymongo 的键不起作用?

为什么 local.oplog.rs 上每隔几分钟的活动就会锁定 mongo 客户端

MongoDB 2.1 聚合框架总和匹配名称的数组元素

Mongoose.pre('save') 不会触发

Python Django-REST-framework 和 Angularjs 的文件夹 struct

MongoDB MapReduce - 发出一个键/一个值不调用reduce

如何在 MongoDB 中删除此弃用警告,为什么会这样?

MongoDB 连接字符串到副本集

按 id 删除记录?