首页 > 解决方案 > Mongoose:如何使用请求正文中存在的字段更新嵌套字段?

问题描述

希望更新 lookupSchema图像嵌套字段

var lookupSchema = new Schema({
    images:{
      "img1":String,
      "img2":String,
      "img3":String,
      "img4":String
    }
 }

由于我不知道在findOneAndUpdate操作期间请求正文中有哪些字段可用,因此我无法像这样分配

$set: { 
    'images.img1':  req.body.img1, 
    'images.img2':  req.body.img2,
    'images.img3':  req.body.img3
}

如果我像上面那样编码并指定所有字段,由于请求中的字段不可用,更新后已经可用的字段变为空。

需要这样的东西来更新可用字段

$set: { "images.$[element]" : req.body  } 

我进行了很多搜索,但找不到解决方案。

标签: node.jsmongodbmongoose

解决方案


您可以简单地创建一个如下所示的函数来实现您的结果。

function update() {
   let temp = {};
   for(let field in req.body) {
   temp["images."+field] = req.body[field];
   }

  db.collection.findOneAndUpdate({._id:...},{$set:temp},{upsert:true},function(err,result)
  {...});
  } 

推荐阅读