@nickerlan

Как сделать слияние массивов Mongo по уникальному ключу?

Дано:
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()
  })
)
  • Вопрос задан
  • 31 просмотр
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы