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