У Mongoose должно быть решение только для обновления полей, которые имеют значение, даже если вы передаете больше полей - PullRequest
0 голосов
/ 01 ноября 2018

У меня есть настоящая головоломка ... хорошо для меня.

У меня есть коллекция, в которой все документы имеют одинаковые поля, но не все могут содержать значения для каждого.

Например:

doc1{
    twitter: '*********',
    facebook: '*********',
    linkedin: '*********'
}

doc2{
    twitter: '*********'
}

doc3{
    facebook: '*********',
    linkedin: '*********'
}

Моя задача заключается в том, что я хочу выполнить функцию updateMany, где я могу передать что-то вроде этого:

updateMany(){
    twitter: '########',
    facebook: '########',
    linkedin: '########'
}

и я хочу обновить только те поля в документах, которые уже имеют значение, а не обновлять все поля, чтобы у каждого документа было значение для каждого поля.

Так бы это выглядело так:

doc1{
    twitter: '########',
    facebook: '########',
    linkedin: '########'
}

doc2{
    twitter: '########'
}

doc3{
    facebook: '########',
    linkedin: '########'
}

Я не уверен, как это сделать, не просматривая каждую запись и каждое поле, что кажется слишком сложным.

У мангуста должно быть что-то для этого сценария ... ???

Спасибо!

1 Ответ

0 голосов
/ 01 ноября 2018

Вы можете попробовать с оператором $ существующие , но вы не можете объединить все эти обновления в один вызов базы данных, так как разные документы будут затронуты в зависимости от свойств (это потому, что вы задаете условие фильтрации и определение обновления отдельно ), однако вы можете динамически построить этот запрос в JS:

let newDoc = {
    twitter: '########',
    facebook: '########',
    linkedin: '########'
};

Object.keys(newDoc).forEach(async (key) => {
    await Model.updateMany({ [key]: { $exists: true} }, { $set: { [key]: newDoc[key] } });
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...