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

Javascript 如何将位置字段应用于Meteor mongo中的集合?,javascript,mongodb,meteor,Javascript,Mongodb,Meteor,我的用例 我有一个在线音乐播放器的播放列表。当前,它们在显示时按自然顺序排序 我想在播放列表中输入一个曲目位置字段 对于meteor mongo db中的集合,最好的实现方法是什么 这是我的歌曲收藏的当前模式 //Schema for Songs Schema.Songs = new SimpleSchema({ trackId: { type: String, label: "Track ID", optional:

我的用例

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

我想在播放列表中输入一个曲目位置字段

对于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,然后所有其他歌曲的位置字段将相应更新


什么是一个很好的起点?

想到的最简单的方法是创建一个名为
playlist
的集合,作为一个名为
歌曲
的字段。
歌曲
字段将是一个字符串数组。这些将是
歌曲的ID

Schema.Playlist = new SimpleSchema({
  'songs.$': {
    type: String,
  }
})
然后,您可以创建一个帮助器来列出所有
歌曲
。让我们称之为
showPlaylist
。它将
歌曲
字段中的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
}