如何将位置字段应用于Meteor mongo中的集合?

时间:2015-06-20 00:24:36

标签: javascript mongodb meteor

我的用例

我有一个在线音乐播放器的播放列表。目前,它们在显示时按自然顺序排序。

我想为播放列表中的曲目位置添加一个字段。

在meteor mongo db中为集合实现此功能的最佳方法是什么。

这是我当前歌曲集合的当前架构。

    //Schema for Songs
    Schema.Songs = new SimpleSchema({
      trackId: {
        type: String,
        label: "Track ID",
        optional: false
      },
      title: {
        type: String,
        label: "Name",
        optional: false
      },
      duration:{
        type: Number,
        label: "Duration",
        optional: false
      },
      festivalId: {
        type: SimpleSchema.RegEx.Id,
        optional: false
      }
    });

我希望能够重新排序歌曲,例如位置3的歌曲。我想将其移动到位置1,然后所有其他歌曲位置字段将适当更新。

这会是一个很好的起点吗?

1 个答案:

答案 0 :(得分:0)

最简单的方法是将一个名为playlist的集合作为一个名为songs的字段。 songs字段将是一个字符串数组。这些是Songs

的ID
Schema.Playlist = new SimpleSchema({
  'songs.$': {
    type: String,
  }
})

然后,您可以创建一个帮助器来列出所有song。我们称之为showPlaylist。它会将songs字段中的ID解析为其透视文档。我将showPlaylist反应返回的数组生成。这样可以省去一些工作。

{{ #each showPlaylist }}
  <audio id="{{ _id }}" class="song" src="{{ src }}"></audio>
{{ /each }}

现在你必须为用户写一些东西来重新排序列表并调用它:

function updatePlaylistOrder (oldPos, newPos, id) {
  var newList = moveElement(Playlists.findOne(id), oldPos, newPos)
  Playlists.update(playlistId, {$set: {songs: newList}})
  return newList
}

Credit for the moveElement function/u/Matt