Пример 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 - это сильно на любителей заморочиться...