その正確なクエリを取得する場合は、次のようにします。
// create the $elemMatch with Type and Value
// as we're just trying to make an expression here,
// we'll use $elemMatch as the property name
var qType1 = Query.EQ("$elemMatch",
BsonValue.Create(Query.And(Query.EQ("Type", 1),
Query.EQ("Value", "a"))));
// again
var qType2 = Query.EQ("$elemMatch",
BsonValue.Create(Query.And(Query.EQ("Type", 2),
Query.EQ("Value", "b"))));
// then, put it all together, with $all connection the two queries
// for the Properties field
var query = Query.All("Properties",
new List<BsonValue> {
BsonValue.Create(qType1),
BsonValue.Create(qType2)
});
卑劣な部分は、さまざまなメソッドへのパラメーターの多くがクエリではなく sQuery
を想定している一方で、次のようなことを行うことでインスタンスからインスタンスを作成できることです。BsonValue
BsonValue
Query
// very cool/handy that this works
var bv = BsonValue.Create(Query.EQ("Type", 1));
送信された実際のクエリは、元のリクエストと正確に一致します。
query = {
"Properties": {
"$all": [
{ "$elemMatch": { "Type": 1, "Value": "a" }},
{ "$elemMatch": { "Type": 2, "Value": "b" }}
]
}
}
(私はその$all
ような使用方法も見たことがありませんが、どうやら、まだ文書化されていないようです。)