我有以下模型:
const PlaylistSchema = new mongoose.Schema({
name: String,
id: String,
offset: Number,
tracks: [Track],
});
const RoomSchema = new mongoose.Schema({
name: String,
queue: [Track],
playlist: PlaylistSchema,
users: Array,
createdBy: Object,
qrCodeId: String,
isPlaying: Boolean,
}, {
timestamps: true,
});
但是播放列表并不总是存在。在执行的查询之一中,我想重置队列和播放列表中的所有播放状态。但是有时播放列表尚未设置,因此查询中断了我的代码。
Room.findOneAndUpdate(
{ _id: roomId },
{
$set: {
isPlaying: false,
'playlist.tracks.$[].isPlaying': false,
'queue.$[].isPlaying': false,
},
},
{
upsert: false,
new: true,
},
...
如果播放列表键存在,我只想设置重置播放列表中曲目的isPlaying
值。
我已经尝试过了:
Room.findOneAndUpdate(
{ _id: roomId },
{
$set: {
isPlaying: false,
'queue.$[].isPlaying': false,
},
playlist: {
$exists: true,
$set: {
'playlist.tracks.$[].isPlaying': false,
}
}
},
{
upsert: false,
new: true,
},
.... )
但这以某种方式从对象中删除了播放列表。
有没有办法做到这一点?