2017-02-24 69 views
0

我嘗試使用MongoDB進行聚合。但這隻適用於mongo shell。當我用貓鼬嘗試時,聚合返回一個空數組。爲什麼這個聚合不適用於Mongoose?

此查詢的工作有關MongoDB殼牌

db.models.aggregate([ 
    { $match: {_id: modelId)} }, 
    { $project: {years: { $setUnion: [ "$modelYears.year"]}} } 
]) 

但同樣在貓鼬返回一個空數組

Model.aggregate([ 
    {$match: {_id: modelId}}, 
    {$project: {years: { $setUnion: [ "$modelYears.year"]}}} 
    ], (err, model) => { 
    console.log('model', model); 
    }) 

文檔結構是:

{ 
    "_id" : ObjectId("string"), 
    "name" : "Jhon", 
    "modelYears" : [ 
     { 
      "year" : 1989, 
      "spec" : [] 
     }, 
     { 
      "year" : 1988, 
      "spec" : [] 
     }, 
     { 
      "year" : 1987, 
      "spec" : [] 
     } 
    ], 
} 

回答

0

您使用的$setUnion是不對,並且是多餘的。 $setUnion需要兩個或更多的陣列。

你可以使用類似的東西。

db.models.aggregate([ 
{ $match: {_id: modelId)} }, 
{ $project: {years: "$modelYears.year"}} 
]) 

在一方你甚至不需要聚合。

db.models.find({_id: modelId}, {"modelYears.year":1}) 
+0

不起作用。我不得不這樣做: 'Model.findOne({_ id:modelId}) .select({'modelYears.year':1}) .exec((err,model)=> {var_type = .pluck(model.modelYears,'year'); res.status(200).json(年) })' –

+0

啊你是對的。更新。我把它與聚合混合在一起。 – Veeram

+0

這個查詢返回一個像這樣''[{year:2014},{year:2015}]' 年的數組,但我需要這樣的:'[2014,2015]''。 我的解決方法是使用'_.pluck(model.modelYears,'year');' –

相關問題