Periksa apakah nilai tidak ada di sub dokumen dari sub dokumen

Saya skema berikut.

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

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

Saya perlu menghitung berapa banyak kejadian di MySchema sehingga pesan terakhir dari setiap pengguna tidak memiliki nilai baca sebagai 'A'

Saya perlu menggunakan agregat, sehingga saya bisa bergabung dengan kueri yang ada.


person Guilherme Reda    schedule 05.12.2016    source sumber


Jawaban (1)


Ini seharusnya berfungsi, jika tidak harap sertakan beberapa contoh data dan hasil yang diharapkan sehingga saya akan memperbarui jawaban saya nanti:

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