私は次の構造を持っています:
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; }
}
保存すると、次のようなものが生成されます。
{
"_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
}
私がやりたいことは、既に作成されたスレッドがある場合、同じスレッドを使用し、ユーザーが同じユーザーに送信しているか、またはその逆であるかに基づいて、そのスレッドにメッセージを追加することです。
私はこのようなものがうまくいくと思っていましたが、null (値なし) を返しています:
var thread = threadHelper.Collection.Find(
Query.And(Query.EQ("Recipients.UserId", user.Id), Query.EQ("Recipients.UserId", sendToUser.Id))
).SingleOrDefault();
私はすべてが含まれているように考えていますか?またはすべてを持っていますか?クエリの作成方法がよくわかりません。