当前位置: 首页 > 知识库问答 >
问题:

数据存储在新记录[duplicate]中,而不是存储在数组中

阳博赡
2023-03-14


我上传图像使用平均堆栈和Multer模块
我可以从angular中检索图像,甚至可以将图像路径发布到Mongoose集合

问题是,我希望有一个图像数组,但在发布到mongoose时,它会将每个图像存储为一个新记录

图像模式

var imageSchema=new Schema({
    productId:{type: String,required: false},
    imagePaths: [{type: String, required: false}]
});



POST API

router.post('/upload', upload.any(), function(req , res){
  console.log('Executing Upload API..');
    console.log(req.body);
    console.log(req.files);
    var images = req.files;

req.files.forEach(function(file){
      var filename = (new Date()).valueOf() + '-' + file.originalname;
      fs.rename(file.path,'public/images/'+ filename, function(err){
       // if (err) throw err;
        //Save to mongoose

        var image = new Image({
          productId: 1007,
          imagePaths: filename
        });
        image.save(function(err, result){
          if(err) throw err;
            res.json(result);
        });
        console.log('FileName :' + filename);

      });
    });
});



收藏已保存
如果我发布两张图像,它将按如下所示进行存储,但我希望两张图像都保存在同一记录中,即在imagepath:

**

{
        "_id" : ObjectId("59abab004783d90bccb4a723"),
        "productId" : "1007",
        "imagePaths" : [
                "1504422656691-Screenshot (4).png"
        ],
        "__v" : 0
}
{
        "_id" : ObjectId("59abab004783d90bccb4a724"),
        "productId" : "1007",
        "imagePaths" : [
                "1504422656691-Screenshot (3).png"
        ],
        "__v" : 0
}

**
请帮忙。

共有1个答案

王旺
2023-03-14

在您的foreach中,您正在使用new Image为每个文件创建新记录,而您应该做的是创建所有文件名的数组,并制作一次记录。也许这段代码会对你有所帮助。

router.post('/upload', upload.any(), function(req , res){
  console.log('Executing Upload API..');
  console.log(req.body);
  console.log(req.files);
  var images = req.files;

  const filePromises = req.files.map(function(file){
    var filename = (new Date()).valueOf() + '-' + file.originalname;
    console.log('FileName :' + filename);

    return new Promise(function(resolve, reject) {

      fs.rename(file.path,'public/images/'+ filename, function(err) {
        if (err) return reject(err);
        return resolve(filename);
      });
    });

  });

  Promise.all(filePromises)
  .then( fileNames => {

    var image = new Image({
      productId: 1007,
      imagePaths: fileNames
    });

    image.save(function(err, result){
      if(err) throw err;
      res.json(result);
    });
  })

});

在本文中,我创建了包含文件名的promise数组,然后使用Promise解析所有promise。全部以最终获得解析的文件名数组,然后我可以简单地传递该数组以创建新记录。

 类似资料:
  • 问题内容: 我正在开发一个PHP应用程序,该程序需要将各种设置存储在数据库中。客户经常询问是否可以添加或更改/删除某些内容,这已导致表格设计出现问题。基本上,我有很多布尔字段,它们仅指示是否为特定记录启用了各种设置。 为了避免使表格混乱,我考虑将数据存储为序列化数组。我已经读过,这被认为是不好的做法,但是我认为这是使用这种方法的合理案例。 有什么真正的理由避免这样做吗? 任何建议表示赞赏。 谢谢。

  • 主要内容:程序员的幽默计算机要处理的信息是多种多样的,如数字、文字、符号、图形、音频、视频等,这些信息在人们的眼里是不同的。但对于计算机来说,它们在内存中都是一样的,都是以二进制的形式来表示。 要想学习编程,就必须了解二进制,它是计算机处理数据的基础。 内存条是一个非常精密的部件,包含了上亿个电子元器件,它们很小,达到了纳米级别。这些元器件,实际上就是电路;电路的电压会变化,要么是 0V,要么是 5V,只有这两种电压。

  • 当我扩展CrudRepository接口时,我的子接口中有方法。我可以写 签入我的服务层。

  • 问题内容: 我正在尝试将sql数据库中的数据存储到数组中。目前我有这个: 问题是我有8行数据。我需要将数据库中的每个8个名称存储到一个数组中。当我尝试这个: 它不起作用。 问题答案: 您想要的是: 这会将所有8个名称存储在类似于以下内容的数组中:

  • 问题内容: 我是Java新手。我如何在HashMap中存储整数值数组,之后我将此HashMap写到txt文件中,但此刻目前不重要。我可以存储单个字段,但不能存储数组。有任何想法吗 ? 问题答案: 例如选一个 要不就