#javascript #mongodb #typescript #mongoose
#javascript #mongodb #машинопись #мангуст
Вопрос:
Извините, если заголовок непонятен, я не знал, как еще это выразить.
Допустим, у меня есть следующая схема:
{
name: {
type: String
},
additionalInfo: {
someInfo: {
a: {
type: String
},
b : {
type: String
}
}
}
}
Теперь предположим, что я хочу создать функцию, которая изменяет поле b
и ТОЛЬКО b
.
function changeB(id, newB) {
return new Promise((resolve, reject) => {
myModel.findByIdAndUpdate(id, { additionalInfo: { someInfo: { b } } }, (err, doc) => {
if(err) reject(err);
if(doc) resolve(doc);
reject();
});
});
}
Проблема здесь в том, что функция полностью перезаписывает additionalInfo
для этого документа. Итак, если бы у меня тоже было a
значение в нем, после запуска этой функции оно исчезло. Что я должен сделать, чтобы изменить только additionalInfo.someInfo.b
?
Ответ №1:
На самом деле при написании этого вопроса (особенно в этом последнем предложении) Я понял это сам. Следующая функция только изменяет additionalInfo.someInfo.b
, не удаляя ничего другого.
function changeB(id, newB) {
return new Promise((resolve, reject) => {
myModel.findByIdAndUpdate(id, { 'additionalInfo.someInfo.b': newB }, (err, doc) => {
if(err) reject(err);
if(doc) resolve(doc);
reject();
});
});
}
Комментарии:
1. Интересно и не совсем интуитивно, тем более что
'additionalInfo.someInfo.b'
это совершенно правильное имя свойства.