2017-12-06 8 views
0

두 개의 콜렉션을 조회하고 그 결과를 결합하여 다른 콜렉션을 작성하는 데 문제점이 있습니다.pentaho에서 쿼리 조건이있는 두 개의 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 
} 

나는 컬렉션이 데이터를 수집 한을 업데이트해야합니다. 그래서 마침내 나는 다음과 같이 콜렉션 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 } 
    }]) 
을 사용할 수 있습니다