2

これは、node.jsとmongodbを怒らせた最初の調査です。そのため、何か馬鹿げたことをしたり、明らかなことを見逃したりした可能性がありますが、以下のドキュメントとクエリを考えると、なぜ空のオブジェクトが返されるのでしょうか。

1ドキュメントの例

{  
    __v: 0, 
    _id: ObjectId("50bf7f12fc71b74f3b000001"),
    amount: 452.23, 
    categoryId: 13, 
    created: ISODate("2012-12-05T17:06:26Z"), 
    description: "Test", 
    typeId: 1, 
    updated: ISODate("2012-12-05T17:06:26Z")
}

2問題コード

var Schema = mongoose.Schema;  

var Expense = new Schema({  
    description: { type: String, required: true },  
    amount: { type: Number, required: true },  
    created: { type: Date, default: Date.now },
    updated: { type: Date, default: Date.now },
    categoryId: { type: Number, required: true },
    typeId: { type: Number, required: true }
});

var ExpenseModel = mongoose.model('Expense', Expense);

ExpenseModel.aggregate(  
    { $group: { _id: '$typeId', total: { $sum: '$amount' }}}, 
    function (err, summary) {
        if(err){
            return res.send(500, { error: err }); 
        }

        if(summary) {
            return res.send(summary);
        } else {
            res.send(500, { error: 'couldnt find expenses' }); 
        }
    }
);
4

2 に答える 2

4

モデルが正しいコレクションを参照していることと、$group前に渡していることを確認してください$project。完全な例を次に示します。

var db = mongoose.createConnection('localhost:27017/myDatabase');

var expenseSchema = new mongoose.Schema({
    description: { type: String, required: true },  
    amount: { type: Number, required: true },  
    created: { type: Date, default: Date.now },
    updated: { type: Date, default: Date.now },
    categoryId: { type: Number, required: true },
    typeId: { type: Number, required: true }
});

var Expense = db.model('expenses', expenseSchema); // make sure the first argument matches your collection's name

Expense.aggregate(  
    { $group: { _id: '$typeId', expense: { $sum: '$amount' }}}, // 'group' goes first!
    { $project: { _id: 1, expense: 1 }}, // you can only project fields from 'group'
    function(err, summary) {
        console.log(summary);
    }
);

これにより、「typeId」に基づいてすべての費用を集計した出力が得られます。

[
    { _id: 1, expense: 300.00 },
    { _id: 2, expense: 45.00 },
    ...
]

この質問に答えるために集約について学んだばかりなので、何か問題があれば教えてください。

于 2012-12-09T15:19:24.393 に答える
1

コレクションの名前を経費から経費に変更すると、問題が解決しました。

于 2012-12-09T20:20:09.270 に答える