【发布时间】:2015-11-16 13:30:06
【问题描述】:
从每小时返回一条记录的 MongoDB 聚合中,我还需要知道“模式”或字段中最常出现的值。
到目前为止,我已经选择了两个日期之间的记录集,并且每小时返回一条记录,包括字段值的平均值。但我还需要最常见的类别,其中类别编号字段包含 1、2、3 或 4。
var myName = "CollectionName"
//schema for mongoose
var mySchema = new Schema({
dt: Date,
value: Number,
category: Number
});
var myDB = mongoose.createConnection('mongodb://localhost:27017/MYDB');
myDBObj = myDB.model(myName, evalSchema, myName);
以下 $group 中的日期数学为一天中的每个小时创建一条记录,$avg 平均价格字段....
但我不知道如何在类别字段中返回最频繁出现的 1、2、3 或 4...没有 $mode 聚合运算符,我收到错误 "exception: unknown group operator '$mode'"
myDBObj.aggregate([
{
$match: { "dt": { $gt: new Date("October 13, 2010 12:00:00"), $lt: new Date("November 13, 2010 12:00:00") } }
},{
$group: {
"_id": {
"dt": {
"$add": [
{
"$subtract": [
{ "$subtract": ["$dt", new Date(0)] },
{
"$mod": [
{ "$subtract": ["$dt", new Date(0)] },
3600000//1000 * 60 * 60
]
}
]
},
new Date(0)
]
}
},
"price": { "$avg": "$price" },
"category" : { "$mode" : "$category"}
}
}], function (err, data) { if (err) { return next(err); } res.json(data); });
有没有办法返回字段中包含的最常见值?
我需要使用 map-reduce 函数吗?我如何将它们与上面的每小时聚合结合起来?感谢您的帮助。
【问题讨论】:
标签: mongodb mongodb-query aggregation-framework