2016-09-15 65 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

相关问题