在c#中动态查询Mongo集合



我是C#mongo的新手,以前研究过Node和mongo。我有一个叫做tasks的集合。下面是一个示例记录。

{
"_id" : ObjectId("6193bfba23855443a127466a"),
"taskIdentifier" : LUUID("00000000-0000-0000-0000-000000000000"),
"title" : "PR Liquidators",
"company" : "iuytreugdfh",
"purpose" : "test purpose",
"column" : "Search",
"assignTo" : "Shiva",
"assignToId" : ObjectId("61933b47a79ac615648a7855"),
"assignToImage" : null,
"notes" : "ggh@William james ",
"done" : 0,
"taskID" : "00029",
"status" : "Pending",
"states" : [ 
"Alabama - AL", 
"Alaska - AK"
],
"active" : true,
"updatedAtUtc" : ISODate("2021-11-18T12:26:37.616Z"),
"updatedBy" : ""
}

在我的c#webapi项目中,我总是从以下形式的api请求中得到一个名为filterCredential的数组:

filterCriteria=[
{key:"purpose",value:"test purpose",type:"eq"},
{key:"active",value:true,type:"eq"}
]

现在,我想使用给定的filterCriteria查询mongo集合任务。

尝试了一些使用LINQ语句的东西,但没有用——硬编码可以工作,但动态不工作。我怎样才能做到这一点???

也许您正在寻找Builders:

public enum FilterType{
eq=1,//equal
gt=2//greater than
}
//************
var builder = Builders<FilterCritertiaModel>.Filter;
var query = builder.Empty;
foreach(var filterCriteriaItem in filterCriteria){
switch (filterCriteriaItem.type) {
case eq:
query &= builder.Eq(filterCriteriaItem.Key, filterCriteriaItem.Value);
case gt:
query &=builder.Gt(filterCriteriaItem.Key, filterCriteriaItem.Value);
//all cases....
}

最新更新