2016-09-15 49 views
1

我正在與貓鼬, ,我想選擇字段包括一個新的領域,其價值是其他特定領域的總和。 例如,下面有一個模型模式。如何選擇包括一個新字段,其價值是其他特定領域的總和與貓鼬

const monsterSchema = new Schema({ 
name: { type: String }, 
power: { type: Number }, 
armor: { type: Number }, 
}); 

我要選擇具有字段「名稱」,「權力」,「鎧甲」,「總」這個記錄。 該字段的值爲'power'和'armour'之和。

我該怎麼做?

回答

1

使用聚合框架,您可以運行具有額外的計算字段如下:a $project管道一步聚集操作(假設你的貓鼬型號被命名爲怪獸):

Monster.aggregate([ 
    { 
     "$project": { 
      "name": 1, 
      "power": 1, 
      "armor": 1, 
      "new_field": { "$add": [ "$power", "$armor" ] }  
     } 
    } 
]).exec(function(err, result){ 
    if(err) handleError(err); 
    console.log(JSON.stringify(result, null, 4)); 
}) 
+0

非常感謝。無論如何,你知道我在填充後如何做到這一點嗎?例如像這樣,'Collection.find()。populate('_ monster')。aggregate(.....'。我不僅需要'怪物的領域,而且'集合的領域創造'新領域'有價值其他特定領域的總和 – Benjamin

+0

儘管可能,但您需要創建一個新問題,因爲問題在接收到原始問題的答案後會發展,任何更改都會使您已收到的答案失效,並且通常會對這些用戶類型產生負面影響足以回答你的問題。 – chridam

+0

我剛剛提出了另一個問題。[鏈接](http://stackoverflow.com/questions/39514079/how-to-aggregate-after-populate-with-mongoose) – Benjamin

0

您可以添加虛擬領域到您的模式。

var personSchema = new Schema({ 
    name: { 
     first: String, 
     last: String 
    } 
}); 

personSchema.virtual('name.full').get(function() { 
    return this.name.first + ' ' + this.name.last; 
}); 

var Person = mongoose.model('Person', personSchema); 

這不會存儲在document.May這可以幫助你。 如果你想了解更多關於這個參考下面的鏈接。

mongoose doc

+0

謝謝!在某些情況下會非常有用。 – Benjamin