0
mongoコレクションフィルタ用のフィルタを作成する必要があります。私はMongoドライバ2を.NET用に使用しています。MongoDBから.NETのデータをフィルタリングする
ここにJSONがあります。
[
{
"a": "val_a0",
"b": "val_b0",
"arr":[
{
"c": "val_c0",
"d": "val_d0"
},
{
"c": "val_c1",
"d": "val_d1"
},
{
"c": "val_c2",
"d": "val_d2"
}
]
},
{
"a": "val_a1",
"b": "val_b1",
"arr":[
{
"c": "val_c3",
"d": "val_d3"
},
{
"c": "val_c4",
"d": "val_d4"
},
{
"c": "val_c5",
"d": "val_d5"
}
]
},
...
]
私は、ルートレベルのプロパティa
とネストされたプロパティc
にフィルタを適用する必要があります。マイフィルタコードは次のとおりです。 -
public class MyFilterClass
{
public string a { get; set; }
public MyFilterNestedClass nested { get; set; }
}
public class MyFilterNestedClass
{
public string c { get; set; }
}
とフィルターコード: -
public FilterDefinition<MyClass> Build(MyFilterClass filter)
{
var _filterDef = Builders<MyClass>.Filter.Empty;
_filterDef &= Builders<MyClass>.Filter.Eq(t => t.a, filter.a); // Filter by root level property [a]
// Filter by nested level property [c]
// First way
_filterDef &= Builders<MyClass>.Filter.Eq(t => t.arr.First(w => w.c == filter.MyFilterNestedClass.c).c, filter.arr.c);
// Second way
_filterDef &= builders<MyClass>.filter.where(t => t.a == filter.a &&
t.arr.first(w => w.c == filter.MyFilterNestedClass.c) != null);
return _filterDef;
}
私はネストされたプロパティの基準を適用する方法の両方を使用してみました。しかし、決してデータベースから文書を返すことはありません。
ありがとうございました。最初のクエリは私が必要なものです。しかし、私が適用した基準ではなく、結果のすべての 'arr'子オブジェクトを返します。 – benjamin54
いいえ問題=)。これは単なるフィルタです。データを取得するために使用する完全なコードを共有できますか? – BOR4
これはコードです。あなたの最初のスニペットが含まれています。ちょうどクラス名は異なっています。 – benjamin54