mongodb - 数组的最小值和最大值?

标签 mongodb

我尝试计算一个文档与我收藏中的其他文档的匹配分数。它可以与 mapReduce 一起使用,但我想知道是否可以使用聚合(据说速度快 10 倍)。

我的文档如下:

{
name: "John",
age: 27,
track: {
        section: 12, 
        start: 1,
        end: 4
        }
}

我尝试计算的分数只是min(start_track_1, start_track_2) - max(stop_track_1, stop_track_2)

因此,为了计算约翰的分数,我试图创建我的管道,但它在第二个运算符处已经失败:

db.test.aggregate(
  { $match: {
    'age' : {$gte: 22, $lte: 34},
    'track.section': 12,
    }
  },
  { $project: { 
        _id : 1,
        name : 1,
        min_end: {$min: ["$track.end", 4]},
        max_start: {$max: ["$track.start", 1]}
     }
  }
)

shell 回答:"errmsg": "异常:无效运算符 '$min'"

问题是,我认为 $min 和 $max 运算符在数组上工作,就像 $add 和 $subtract 一样......

所以现在我陷入困境了。我认为 $group 中使用的 $min 和 $max 在这里帮不了我......

有什么想法吗?

最佳答案

聚合中的

$min$group的运算符。

条件运算符将为您提供最小或默认效果。

您可以使用 $subtract 在以下管道 $project 中进行数学计算。

类似于:

db.foo.aggregate(
  { $group: { 
        _id : "$name",
        data_min: {$min: "$track.end"},
        data_max: {$max: "$track.start"}
     }
  },
  {
    $project:{
        _id: "$_id",
        score: { $subtract : [ 
            {$cond:[{$gt:["$data_max",1]},"$data_max",1]},
            {$cond:[{$lt:["$data_min",4]},"$data_min",4]}
        ]}
    }
  }
)

关于mongodb - 数组的最小值和最大值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15946473/

相关文章:

mongodb - Oracle Coherence 能否支持像 MongoDb 这样的复杂查询?

java - 在 Spring Data MongoDB 中使用 List 参数进行存储库查询

mongodb - 如何在 MongoDB 2.6 副本集上启用 HTTP 控制台

适用于 Windows 10 64 位的 MongoDB 下载

mongodb - Morphia/MongoDB : ordering search results from advanced queries

java - MongoDB 的reduce-phase 没有按预期工作

python - Mongoengine 获取最新的()

javascript - 返回某种类型的有限数量的记录,但返回无限数量的其他记录?

node.js - 使用 mongoose 驱动程序的 MongoDB : how to query on a subset of document's array property?

node.js - 如何使用node.js和react.js下载大型CSV文件