这与这个问题非常相似,但是使用类似的方法时,我只得到了包含子文档的文档列表。
我的模式很简单,有些问题可以投票。我的模式(为简单起见删除了一些字段):
我希望有一个包含所有问题及其对应分数的列表。分数是voteSchema中'value'字段的总和。
我试图使用$cond来确保空投票文档被替换为至少一个值为0的投票子文档。但不幸的是,当使用它时,所有的totalScore字段都为0。如果不使用它,则只能得到非空投票的正确totalScore。
我的模式很简单,有些问题可以投票。我的模式(为简单起见删除了一些字段):
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中'value'字段的总和。
我试图使用$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);
});
votes : { $cond : [ { $eq : ["$votes", [] ]}, [ { value : 0} ], '$votes'] }
- Andy Abgottspon