公式の MongoDB C# ドライバーのバージョン 1.5.0.4566 を使用しています。Mongo バージョン 2.06 を使用しています。
私のドキュメント構造は次のようになります (この説明には不要なフィールドを省略しています)。
{ "Parents" :
[
{
"CreatedOn": ISODate("2012-07-28T15:30:06.623Z"),
"Title": "Simple Title",
"Children": [
{ "StatusId": 1, "Active" : true, SubChild : { "ExpiresOn": ISODate("2012-07-28T15:30:06.623Z")}},
{ "StatusId": 1, "Active" : true, SubChild : { "ExpiresOn": ISODate("2012-08-28T15:30:06.623Z")}}
]
},
{
"CreatedOn": ISODate("2012-07-28T15:30:06.623Z"),
"Title": "Another Simple Title",
"Children": [
{ "StatusId": 1, "Active" : true, SubChild : { "ExpiresOn": ISODate("2012-07-28T15:30:06.623Z")}},
{ "StatusId": 1, "Active" : true, SubChild : { "ExpiresOn": ISODate("2012-08-28T15:30:06.623Z")}}
]
}
]
}
StatusId が 1 で、Active が true の Children を照会したい場合は、ElemMatch を使用できます。
Query.ElemMatch("Children", Query.And(Query.EQ("StatusId", 1),Query.EQ("Active",true)));
うまくいかないのは、クエリに SubChild 要素を含める必要がある場合です。
Query.ElemMatch("Children", Query.And(Query.EQ("StatusId",1), Query.EQ("Active",true),Query.LT("SubChild.ExpiresOn",DateTime.UtcNow)));
クエリに SubChild.ExpiresOn フィールドを含めようとすると、クエリは値を返しません。このクエリを作成するさまざまな方法を試しましたが、SubChild.ExpiredOn フィールドを含めるとドキュメントがゼロのままになります。
私は何が欠けていますか?
ありがとう、