2016-12-05 7 views
1

のサブ文書に値が存在しないことを確認します。以下のスキーマです。私は私が参加できるように、各ユーザーの最後のメッセージが「」サブ文書

として読み取り値を持っていないことを、私は、集計を使用する必要がありますどのように多くはMySchemaで出現カウントする必要が

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

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

既存のクエリ私は後で私の答えを更新するように、それはいくつかのサンプルデータと予想される結果を記載してくださいしない場合

答えて

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' 
    } 
]) 
関連する問題