如何在MongoDB + Node.js中更新嵌套数组

时间:2012-06-21 14:10:20

标签: node.js mongodb

所以我有一个包含项目数组的播放列表文档。现在我想在项目中添加一个投票数组,但我不知道该怎么做。目前这是我添加新项目的方式......

playlist_collection.update(
  {"PlaylistName": playlistName},
  {"$push": {items: newitem}},
  function(error, playlist){
    if( error ) callback(error);
  });

我知道还有一些关于此的帖子,所以如果有一个很好的例子,那么复制就好了。

这是db

中的对象
{ "PlaylistName" : "MyFirstPlaylist", 
  "_id" : ObjectId("4fe0c6570fb2321b39000001"), 
  "comments" : [ ], 
  "created_at" : ISODate("2012-06-19T18:35:03.462Z"), 
  "items" : [   
      {     "SongName" : "Test",    "Location" : "/tmp/40dd4f78466c3c7171f1eaf448e8f1d6" } 
  ] 
}

1 个答案:

答案 0 :(得分:0)

我最终使用了这个......

PlaylistProvider.prototype.addVoteToItem = function(, itemname, vote, callback) {
  this.getCollection(function(error, collection) {
    collection.findOne({'PlaylistName':playlistName}, function (err, playlist) {
      if( err ) callback( err );
      playlist.items.forEach(function (item) {
        for (var prop in item) {
          if (prop == 'SongName'){
            if(item[prop] == itemname){
              console.log("Found "+item[prop])
              if( item.votes === undefined ) item.votes = [];
          item.votes.push(vote)
              collection.save(playlist)
              callback(null, playlist)
              break;
            } 
          }  
        }
      })
    })
  })
}