MongoDB设置密钥(如果存在)

时间:2019-06-27 11:41:22

标签: arrays mongodb mongodb-query

我有以下模型:

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,
    },
.... )

但这以某种方式从对象中删除了播放列表。

有没有办法做到这一点?

0 个答案:

没有答案