Дано:
1. Массив addTags = [ 'tag1', 'tag2', ... ]
2. Простая выборка вида condition = {param:"value"}
3. Объект с такого вида:
someObject {
...
param: String,
tags:[{
name:String,
timestamp:Date
}]
}
Задача:
Во все объекты, подходящие под выборку condition, добавить недостающие тэги из массива addTags по признаку совпадения поля name и элемента addTags. Вновь добавленым тэгам присвоить timestamp, соответствующий текущему времени.
Вопрос:
Решается ли это средствами Mongo?
Решение "в лоб" на JS мне кажется уж больно неоптимальным, оно видится в таком духе:
const tagDates = addTags.map(tag=>{name:tag, timestamp:Date.now()}
findMany(condition).then(
foundObjects=>foundObjects.forEach(object=>{
const newTags = mergeByName(object.tags, tagDates)
updateOne({id:object.id},{tags:newTags}).then()
})
)