2017-12-06 7 views
0

2つのコレクションを照会し、結果を組み合わせて別のコレクションを作成する際に問題があります。pentahoのクエリ条件付き2つのmongoコレクションを結合します。

Collection1:

{ 
    "ResourceCost" : 0.0032258065, 
    "ResourceId" : "i-08c35f123eea43f30", 
    "Unit" : "USD", 
    "billdate" : ISODate("2017-12-01T16:30:00.000Z") 
} 

コレクション2:

{ 
    "resource_id" : "i-08c35f123eea43f30", 
    "Timestamp" : ISODate("2017-12-01T18:30:00.000Z"), 
    "Avg" : 0.0, 
    "total" : 0.0, 
    "sample_cnt" : 1440.0, 
    "max" : 0.0, 
    "min" : 0.0 
} 

私はコレクションで2つのデータを収集1を更新する必要があります。最後にコレクション1のデータが次のようになることを期待しています

フィールドとリソースIDの両方が同じ時刻であることを確認してください。

db.col1.aggregate([ 
{ 
    $lookup:{ 
      from:"col2", 
      localField:"ResourceId", 
      foreignField:"resource_id", 
      as:"result" 
     } 
},{ 
    $unwind:"$result" 
},{ 
    $project:{ 
      "ResourceCost":"$ResourceCost", 
      "ResourceId":"$ResourceId", 
      "Unit":"$Unit", 
      "billdate":"$billdate", 
      "_id":0, 
      "avg":"$result.Avg", 
      "total":"$result.total", 
      "sample_cnt":"$result.sample_cnt", 
      "max":"$result.max", 
      "min":"$result.min" 
     } 
} 
]) 

について$loopup$unwindと参照用$project読み、

{ 
    "ResourceCost" : 0.0032258065, 
    "ResourceId" : "i-08c35f123eea43f30", 
    "Unit" : "USD", 
    "billdate" : ISODate("2017-12-01T16:30:00.000Z") 
    "Avg" : 0.0, 
    "total" : 0.0, 
    "sample_cnt" : 1440.0, 
    "max" : 0.0, 
    "min" : 0.0 
} 

答えて

0

私はこのことができます願っています。データ

コレクション1を更新します。

0

のMongoDB 3.4では、あなたはこの

db.col1.aggregate([ 
    { 
     $lookup:{ 
       from:"col2", 
       localField:"ResourceId", 
       foreignField:"resource_id", 
       as:"result" 
      } 
    }, { 
     $replaceRoot: { 
     newRoot: { 
      $mergeObjects: [ { $arrayElemAt: [ "$result", 0 ] }, "$$ROOT" ] 
     } 
    } 
    },{ 
    $project: { result: 0 } 
    }]) 
を使用することができます
関連する問題