Объединить две коллекции монго с условием запроса в пентахо

У меня проблема с запросом двух коллекций и объединением результатов для формирования другой коллекции.

Коллекция1:

{
    "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 данными коллекции 2. Итак, наконец, я ожидаю данные коллекции 1, как показано ниже.

Проверяйте с одинаковым временем как поля, так и идентификатор ресурса. Обновить данные

коллекция 1:

{
   "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
}

person sangeeth kumar    schedule 06.12.2017    source источник


Ответы (2)


Надеюсь, это поможет,

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 для справки.

person Anirudh Bagri    schedule 06.12.2017

В 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 } 
     }])
person Shubham    schedule 06.12.2017