【发布时间】:2014-04-02 14:40:23
【问题描述】:
这与this question 非常相似,但是,当使用类似的方法时,我不断得到一个仅包含子文档的文档列表。
我有一个简单的模式,其中的问题可以投票赞成和反对。我的架构(为简单起见,我删除了一些字段):
var mongoose = require('mongoose');
var voteSchema = new mongoose.Schema({
value: Number,
});
// Document schema for polls
exports.PollSchema = new mongoose.Schema({
question: { type: String, required: true },
votes: [voteSchema],
});
我想要一个包含所有问题及其各自分数的列表。分数是 voteSchema 中“值”字段的总和。
我正在尝试使用 $cond 来确保将空投票文档替换为至少一个值为 0 的投票子文档。不幸的是,使用它时,我所有的 totalScore 字段都是 0。如果不使用它,我得到了正确的 totalScore,但仅适用于非空的。
Poll.aggregate([
{ $project: {
_id: 1,
question: 1,
totalScore : 1,
votes : { $cond : [ { $eq : ["$votes.length", 0]}, '$votes', [ { value : 0} ]] }
}},
{ $unwind: "$votes" },
{ $group: {
_id : "$_id",
question: { $first: "$question" },
totalScore : { $sum: "$votes.value" }
}},
], function(error, polls) {
console.dir(polls);
});
【问题讨论】:
标签: mongodb aggregation-framework