0
我需要爲我的mongo收集過濾器創建一個過濾器。我正在使用Mongo driver for .NET。使用.NET驅動程序從MongoDB中過濾數據
這是我的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