2016-09-15 12 views
1

私はmongoose、 と一緒に作業していますが、値は他の特定のフィールドの合計である新しいフィールドを含むフィールドを選択したいと思います。 たとえば、次のようなモデルスキーマがあります。新しいフィールドを含む新しいフィールドを含む値を選択する方法は、特定のフィールドの他のフィールドの合計です

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

'name'、 'power'、 'armor'、 'total'の各フィールドを持つレコードを選択します。 フィールドには、 'power'と 'armor'の合計値があります。

どうすればいいですか?

あなたが追加することができます
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)); 
}) 

答えて

1

あなたは次のように(自分のマングースモデルがモンスターの名前と仮定して)、余分な計算されたフィールドを持つ$projectパイプラインステップで集計操作を実行することができます集約フレームワークを使用します仮想フィールドをスキーマに追加します。

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); 

これはドキュメントに保存されません。 これについて詳しく知りたい場合は、以下のリンクを参照してください。

mongoose doc

+0

ありがとう。万が一、人口を集めた後、どうやってそれをやることができるのか分かりますか?例えば、このように 'Collection.find()。populate(' _ monster ')。aggregate(.....' Monsterのフィールドだけでなく、 'new field'を作成するためのCollectionのフィールドも必要です。他の特定のフィールドの合計 – Benjamin

+0

元の質問に対する回答を受け取った後に質問が進展するので、新しい質問を作成する必要がありますが、変更によって変更が反映されず、あなたの質問に答えるのに十分です。 – chridam

+0

私はちょうど別の質問をしました。[リンク](http://stackoverflow.com/questions/39514079/how-to-aggregate-after-populate-with-mongoose) – Benjamin

0

+0

ありがとう!場合によっては非常に便利です。 – Benjamin

関連する問題