Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/459.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript Mongoose在json中查找和更新json_Javascript_Mongodb_Typescript_Mongoose - Fatal编程技术网

Javascript Mongoose在json中查找和更新json

Javascript Mongoose在json中查找和更新json,javascript,mongodb,typescript,mongoose,Javascript,Mongodb,Typescript,Mongoose,如果标题不清楚,我很抱歉,我不知道该怎么说 假设我有以下模式: { name: { type: String }, additionalInfo: { someInfo: { a: { type: String }, b : { type: String } } } } 现在假设我想做一个函数,它改变字段b,并且只改变b function changeB(id, newB)

如果标题不清楚,我很抱歉,我不知道该怎么说

假设我有以下模式:

{
  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
值,在运行该函数后,它将消失。我该怎么做才能只更改
附加信息.someInfo.b

实际上,在写这个问题时(特别是最后一句话),我自己就明白了。以下函数仅更改
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();
    });
  });
}

有趣且不完全直观,特别是因为
'additionalInfo.someInfo.b'
是一个完全有效的属性名。