2

私はmongooseと一緒に作業しています。母集団作成後に集計を行う際に問題があります。 以下は例です。母集団を母集団にした後に集計する方法

マングースモデルスキーマ、モンスター、コレクションの2つがあります。

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

const collection = new Schema({ 
    _monster: { type: Schema.Types.ObjectId, ref: 'Monster' }, 
    addedPower: { type: Number }, 
    addedArmor: { type: Number }, 
}); 

フィールド '_monster'は、スキーマ 'モンスター'に対するスキーマ 'コレクション'の外部キーです。

以下のように、このパスを使用して「モンスター」と「コレクション」を設定します。

Collection.find().populate('_monster') 

そして、この結果を以下のように集計したいと思います。

AboveResult.aggregate([ 
    { 
     '$project': { 
      'new_field': { 
       '$add': [ 
        '$addedPower', '$addedArmor', '$_monster.power', '$_monster.armor' 
       ] 
      } 
     } 
    } 
]); 

上記は機能しませんが、私が望むものについては説明すると思います。答えは感謝します。

+0

はおそらく重複しhttp://stackoverflow.com/questions/16680015/how-to-use-同じ文の集計と集計 –

答えて

3

あなたは移入のための代替として$lookupを使用することができ、これは、サーバー上で行われます

Collection.aggregate([ 
    { 
     "$lookup": { 
      "from": "monsters", 
      "localField": "_monster", 
      "foreignField": "_id", 
      "as": "monster" 
     } 
    }, 
    { "$unwind": "$monster" }, 
    { 
     "$project": { 
      "name": "$monster.name", 
      "power": "$monster.power", 
      "armor": "$monster.armor", 
      "addedPower": 1, 
      "addedArmor": 1, 
      'new_field': { 
       '$add': [ 
        '$addedPower', 
        '$addedArmor', 
        '$monster.power', 
        '$monster.armor' 
       ] 
      } 
     } 
    } 
]).exec(callback); 
+1

うわー。私はこれを試してみる。ありがとうございました! – Benjamin

+0

それは完璧に働いた! – Benjamin

関連する問題