суббота, 25 декабря 2021 г.

Полезные ссылки: блоги

Полезные блоги:
  • Start Android "Учебник по Android для начинающих и продвинутых"
  • TRETYAKOV.NET "О веб разработке и IT"
  • Ivan Grishaev's blog "Writing on programming, education, books and negotiations."
===
Перепечатка материалов блога разрешается с обязательной ссылкой на blog.coolsoftware.ru

понедельник, 6 декабря 2021 г.

MongoDB: aggregate

Пример aggregation в Mongo:
db.targets.aggregate([
  {$sort:{"processing":1}},
  {$lookup:{
    from:"campaigns",
    let:{campaign:"$campaignname"},
    pipeline:[
      {$match:{$expr:{$and:[
        {$eq:["$campaignname","$$campaign"]},
        {$eq:["$enabled",true]}
      ]}}}
    ],
    as:"campaign"}
  },
  {$unwind:"$campaign"},
  {$limit:1},
  {$set:{
    date:Date.now(),
    processing:{
      $ifNull:[{$add:["$processing",1]},1]
    }
  }},
  {$merge:"targets"}
]);
Соответствующий UPDATE в MySQL выглядел бы примерно так:
update targets 
inner join (
  select targets.id from targets
    inner join campaigns 
    on targets.campaignname=campaigns.campaignname
  where campaigns.enabled
  order by processing
  limit 1
) t
on targets.id = t.id
set processing=IFNULL(processing,0)+1, date=now()
Второй вариант короче, проще, понятнее, и напишу я его в разы быстрее. В общем, по-моему, Mongo - это сильно на любителей заморочиться...

===
Перепечатка материалов блога разрешается с обязательной ссылкой на blog.coolsoftware.ru