2015-08-14 60 views
0

我正嘗試使用基於我的貓鼬模型的聚合。我想根據categoryId彙總金額。但是當試圖通過路由URL訪問時,我得到這個錯誤。 (對於路徑「_id」,投射到ObjectId的值爲「test」失敗)。當與貓鼬聚合時,投射到ObjectId的路徑「_id」上的值「xxx」失敗

在test.js我的貓鼬模型(模型)

var ObjectId = Schema.ObjectId; 

var test = new Schema({ 
    //testId:ObjectId, 
    testName: String, 
    amount:Number, 
    categoryId:String 
}); 
module.exports = mongoose.model('test', test); 

我的控制器的TestController -

var Test = require('../models/test'); 
function aggTest(req,res){ 
    Test.aggregate([{ 
     $group:{ 
      _id:"$categoryId", 
      totalAmount:{$sum: "$amount"} 
     } 
    }],function(err,result){ 
     console.log(result); 
    }); 
} 

路由映射

router.get('/test',testController.aggTest); 

錯誤但─

{ 
    message: "Cast to ObjectId failed for value "test" at path "_id"" 
    name: "CastError" 
    type: "ObjectId" 
    value: "test" 
    path: "_id" 
} 

有什麼建議嗎?

+1

難道是因爲聚合管道需要2個參數'$ match'和'$ group'?我沒有問題,使用貓鼬聚合的東西與'wherecondition'根據這裏給出的例子,他們有一個'wherewheredition –

+0

http://docs.mongodb.org/manual/tutorial/aggregation-zip-code-data-set/ 使用$ group沒有$匹配 – Sanath

+1

這個錯誤是非常「特定於貓鼬」,所以我懷疑你沒有顯示代碼。我認爲你正試圖將聚合結果「投射」到Mongoose對象中。 '.aggregate()'命令本身只返回「普通對象」。這很有意義,因爲「通常」來自聚合的結果對象看起來與原始集合的模型完全不同。 –

回答

0

我的答案有2個問題。感謝Blake Seven指引我朝着正確的方向前進。我沒有正確的返回返回響應,我的回調函數不正確。 更正的代碼在這裏。

Test.aggregate([ 
     { $group: { 
      _id:"$categoryId", 
      totalAmount:{$sum: "$amount"} 
     }} 
    ], function (err, result) { 
     if (err) { 
      console.log(err); 
      return; 
     } 
     console.log(result); 
     res.json({ data:result }); 
    }); 
相關問題