如何在mongoDB中更新数组的第一个元素?

时间:2015-06-17 09:10:50

标签: node.js mongodb mongoose

我正在学习NodeJs和MongoDb,我将创建一个相册。 我遇到了mongoDB的问题。

事实上,在上传图片后,我将新图片推送到数据库中,如下所示:

AlbumPicture.update({album:'album1'}, {$push: {pictures:file_name}}, function(err, data){
  if(err){
    console.log(err);
  }

  console.log('Database Updated');
});

问题是:'行' :pictures是一个数组()所以当我推送新数据时,这个数组的第一个元素(id:[0])没有设置。

示例:

{
  picture:
    [
      "", // Not Set ??
      "1.jpg",
      "2.jpg"
    ]
}

如何更新此数组的第一个元素,然后再推送其他数据?

我使用这些部分代码进行了测试,但它似乎无法正常工作且不美观。

AlbumPicture.find({album:'album1'}).exec(function(err, data){

  if(err){
    console.log(err);
  }

  if(data[0].pictures[0] == '')
  {
    AlbumPicture.update({album:'album1'}, {$set: {'pictures[0]':file_name}}, function(err, data){
      if(err){
        console.log(err);
      }

      console.log('Database Updated @ 0');
    });
  }
  else
  {
    AlbumPicture.update({album:'album1'}, {$push: {pictures:file_name}}, function(err, data){
      if(err){
        console.log(err);
      }

      console.log('Database Updated');
    });
  }
});

更新:我按照以下方式创建我的收藏:

var albumData = {
  album : 'album1',
  pictures : ''
};

var AlbumPicture = new AlbumPicture(albumData);

AlbumPicture.save(function(error, data){
 if(error){
  console.log(error);
 }
 else
 {
  console.log('Album Created');
  res.json('created');
 }
});

1 个答案:

答案 0 :(得分:0)

如果您将图片设置为空数组,则不应该在索引0处具有值。

var albumData = { album : 'album1', pictures : [] };