我的用例
我有一个在线音乐播放器的播放列表。目前,它们在显示时按自然顺序排序。
我想为播放列表中的曲目位置添加一个字段。
在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,然后所有其他歌曲位置字段将适当更新。
这会是一个很好的起点吗?
答案 0 :(得分:0)
最简单的方法是将一个名为playlist
的集合作为一个名为songs
的字段。 songs
字段将是一个字符串数组。这些是Songs
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
}