Проверьте, не существует ли значение в поддокументе поддокумента

Я следующую схему.

var UserSchema = new Schema({
    messages: [{
        username: String,
        read: [{
            type: { type: String, enum: ['A','B','C'] },
        }]
    }],
});

var MySchema = new Schema({
    users: [UserSchema]
});

Мне нужно подсчитать, сколько раз в MySchema последнее сообщение каждого пользователя не имеет прочитанного значения как «A»

Мне нужно использовать агрегат, чтобы я мог присоединиться к существующему запросу.


person Guilherme Reda    schedule 05.12.2016    source источник


Ответы (1)


Это должно работать, если оно не включает некоторые образцы данных и ожидаемый результат, чтобы я обновил свой ответ позже:

db.collection.aggregate([
  {
    $unwind: '$users',
  },
  {
    $project: {
      lastMessage: {
        $arrayElemAt: ['$users.messages', -1],
      },
    },
  },
  {
    $unwind: '$lastMessage.read',
  },
  {
    $group: {
      _id: '$_id',
      read: {
        $push: '$lastMessage.read',
      },
    },
  },
  {
    $match: {
      read: {
        $nin: ['A']
      }
    }
  },
  {
    $count: 'count'
  }
])
person kkkkkkk    schedule 05.12.2016