繁体   English   中英

我想更新MongoDb文件

[英]I would like to update MongoDb document

我的问题是更新文档的特定字段。 想象一下,当我只是更改文档的一个字段时,我们有多个输入字段,其余的字段将为空,因为我只是更新了其中一个。 有没有一种简单的方法可以更新一个字段,而其余字段保持不变。

我可以提供开关盒或if-else,但我认为这不是解决此类问题的合适方法。

updateChr:async ( args: any) => {
      try {

       const data = await Client.findByIdAndUpdate(args.clientId, 
        {$set:
        {
          chronology:{
            status: args.clientInput.status,
            note:args.clientInput.note,
            date: args.clientInput.date,
            file:{
              filename:args.clientInput.file.filename,
              data:args.clientInput.file.data,
              type:args.clientInput.file.type,
              size:args.clientInput.file.size,
            }
            }
        },
      }
      ,{useFindAndModify: false})
       return transformClient(data);
      } catch (err) {
        throw err;
      }
    },

因此,这部分是您需要注意的地方:

{$set:
        {
          chronology:{
            status: args.clientInput.status,
            note:args.clientInput.note,
            date: args.clientInput.date,
            file:{
              filename:args.clientInput.file.filename,
              data:args.clientInput.file.data,
              type:args.clientInput.file.type,
              size:args.clientInput.file.size,
            }
            }
        },
      }

您要告诉mongo的是,无论现在这些字段中的内容是什么(即使它们当前不存在),也要为您提供的内容设置新的值。 如果提供的是空值,则它将其新值设置为null。 如果您不希望在事物的新值为null时更新它们,则需要先清理数据,然后再将其推入mongo。 最简单的方法是先清理数据,然后再将其添加到上面引用的对象中。 一旦只获得了实际存在的数据,则只需遍历数据即可为mongo创建更新对象,而不是像在此处那样静态地设置它。

或者,如果在此阶段可以使用那些字段中实际应该存在的数据,则可以遍历空值,并用mongo中的当前值或使用的任何值来填充它们。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM