Как запросить коллекцию вложенных документов, используя драйвер MongoDB и C #
У меня есть следующая структура:
<code>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; } } </code>
когда я сохраняю, он производит что-то вроде этого:
<code>{ "_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 } </code>
То, что я хотел бы сделать, - это если уже создан поток, использовать тот же и связывать сообщения с этим на основе того, отправляет ли пользователь тому же пользователю или наоборот.
Я думал, что-то вроде этого будет работать, но он возвращает ноль (без значений):
<code>var thread = threadHelper.Collection.Find( Query.And(Query.EQ("Recipients.UserId", user.Id), Query.EQ("Recipients.UserId", sendToUser.Id)) ).SingleOrDefault(); </code>
Я думаю, что содержит все? или есть все? Не совсем уверен, как сделать запрос.