How to request assembly of supporting documents using MongoDB and C # drivers

I have the following structure:

public class ThreadDocument { public ThreadDocument() { Messages = new List<Message>(); Recipients = new List<Recipient>(); } [JsonIgnore] public ObjectId Id { get; set; } public IList<Recipient> Recipients { get; set; } public IList<Message> Messages { get; set; } public DateTime LastMessageSent { get; set; } public string LastSentByUserName { get; set; } public string LastSentAvatarUrl { get; set; } public string Snippet { get; set; } public int MessageCount { get; set; } } public class Recipient { public string UserId { get; set; } public int Status { get; set; } } public class Message { public string FromUserId { get; set; } public string FromUsername { get; set; } public string FromAvatarUrl { get; set; } public DateTime Sent { get; set; } public string Text { get; set; } } 

when I save, it produces something like this:

 { "_id" : ObjectId("4fa5eab4bfeddf23fcd01e4a"), "Recipients" : [{ "UserId" : "4fa5d4d8bfeddf23fc72e590", "Status" : 1 }, { "UserId" : "4fa5d4f9bfeddf23fc72e592", "Status" : 0 }], "Messages" : [{ "FromUserId" : "4fa5d4d8bfeddf23fc72e590", "FromUsername" : "a", "FromAvatarUrl" : null, "Sent" : ISODate("2012-05-06T03:06:28.396Z"), "Text" : "b" }], "LastMessageSent" : ISODate("2012-05-06T03:06:28.395Z"), "LastSentByUserName" : "a", "LastSentAvatarUrl" : null, "Snippet" : "b", "MessageCount" : 1 } 

What I would like to do is if the stream has already been created, use the same one and stick the messages to it, based on whether the user sends to one user or vice versa.

I thought something like this would work, but it returns null (no values):

 var thread = threadHelper.Collection.Find( Query.And(Query.EQ("Recipients.UserId", user.Id), Query.EQ("Recipients.UserId", sendToUser.Id)) ).SingleOrDefault(); 

I think everything contains everything? or all? Not quite sure how to make a request.

+4
source share
1 answer

Try ElemMatch :

 var thread = threadHelper.Collection.Find( Query.And( Query.ElemMatch("Recipients", Query.EQ("UserId", user.Id)), Query.ElemMatch("Recipients", Query.EQ("UserId", sendToUser.Id)) ) ).SingleOrDefault(); 
+11
source

All Articles