Como consultar uma coleção de sub documentos usando o MongoDB e o driver C #

Eu tenho a seguinte estrutura:

<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>

quando eu salvo, produz algo parecido com isto:

<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>

O que eu gostaria de fazer é se já existe um thread criado, para usar o mesmo e adicionar mensagens àquele baseado em se o usuário está enviando para o mesmo usuário ou vice-versa.

Eu pensei que algo assim iria funcionar, mas está retornando null (sem valores):

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

Estou pensando como um contém tudo? ou tem tudo? Não tenho certeza como fazer a consulta.

questionAnswers(1)

yourAnswerToTheQuestion