我遇到了mongoose聚合请求的问题。
这让我疯狂,因为我无法在任何地方找到解决方案。我非常感谢任何支持。
架构:
var EvalSchema = new Schema({
modified: {type: Date, default: Date.now},
created : {type: Date, default: Date.now},
username: {type: String, required: true},
item: {type: String, required: true},
criteria: [{
description: {
type: String
},
eval: {
type: Number
}
}]
});
mongoose.model('Eval', EvalSchema);
我正在使用聚合来计算给定项目的每个标准的评估总和。
Eval.aggregate([{
$match: {
item: item.id
}
}, {
$unwind: "$criteria"
}, {
$group: {
_id: "$criteria.description",
total: {
$sum: "$criteria.eval"
},
count: {
$sum: 1
}
}
}, {
$project: {
total: 1,
count: 1,
value: {
$divide: ["$total", "$count"]
}
}
}], function(err, result) {
if (err) {
console.log(err);
}
console.log(result);
});
结果总是空的....
我正在记录应用程序中所有mongoose fire的查询。当我在Mongodb中运行查询时,它返回正确的结果。
coll.aggregate([{
'$match': {
item: 'kkkkkkkkkkk'
}
}, {
'$unwind': '$criteria'
}, {
'$group': {
_id: '$criteria.description',
total: {
'$sum': '$criteria.eval'
},
count: {
'$sum': 1
}
}
}, {
'$project': {
total: 1,
count: 1,
value: {
'$divide': ['$total', '$count']
}
}
}])
结果:
{
result: [{
"_id": "Overall satisfaction",
"total": 4,
"count": 1,
"value": 4
}, {
"_id": "service",
"total": 3,
"count": 1,
"value": 3
}, {
"_id": "Quality",
"total": 2,
"count": 1,
"value": 2
}, {
"_id": "Price",
"total": 1,
"count": 1,
"value": 1
}],
ok: 1
}
该模型引用了正确的集合。
谢谢:)
答案 0 :(得分:9)
$.ajax('/url/of/your/file.json/on/the/server', {
success: function(content) {
var json = JSON.parse(content);
var resultArray = Object.keys(json)
.map(function(key) {
return [key,json[key]];
})
.reduce(function(container,nextArray) {
container.push(nextArray);
return container;
}, []);
consle.log(resultArray); // resultArray is what you need
}
});
函数中的item.id
是一个字符串,因此您需要将其转换为 ObjectID ,如下所示:
$match
您可以在GitHub aggregate上查看此问题以获取更多详细信息。