Мангуст находит и обновляет json в json

#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' это совершенно правильное имя свойства.