I try to count unread messages for a user.
On my model, I have a property, LastMessageDate
that contains the date on the last created message in the group chat. I have also a Members
property (list) that contains the members in the group chat. Each member has the UserId
and LastReadDate
properties. The LastReadDate
is updated when the user writes a new message in the group chat or when the user loads messages from the group chat.
Now I want to count the number of chats where a specific user has unread messages (The messages are stored in another collection). I try this:
var db = GetGroupCollection();
var filter = Builders<ChatGroup>.Filter.Where(p => p.Members.Any(m => m.UserId == userId && m.LastReadDate < p.LastMessageDate));
return await db.CountDocumentsAsync(filter);
But I receive the following error:
The LINQ expression: {document}{Members}.Where((({document}{UserId} == 730ddbc7-5d03-4060-b9ef-2913d0b1d7db) AndAlso ({document}{LastReadDate} < {document}{LastMessageDate}))) has the member "p" which can not be used to build a correct MongoDB query.
What should I do? Is there a better solution?