在 C# 中动态查询 Mongo 集合

Posted

技术标签:

【中文标题】在 C# 中动态查询 Mongo 集合【英文标题】:Dynamically Query a Mongo Collection in c# 【发布时间】:2021-12-30 18:03:36 【问题描述】:

我是 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 请求中获得一个名为 filterCriteria 的数组:

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

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

尝试使用 LINQ 语句但没有使用 --hardcoding 工作但动态不工作。 我怎样才能做到这一点???

【问题讨论】:

究竟是什么不工作?你能展示你写的代码,但它没有按预期工作吗? 【参考方案1】:

也许你正在寻找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....

【讨论】:

IMongoQuery 似乎没有找到,我们应该为它使用什么命名空间??我已经在使用 MongoDb.Driver 是的,抱歉,已弃用,我已对其进行了编辑 谢谢,成功了。 很高兴能帮上忙,您可以将其标记为已回答 我一直无法从 api 获取条件数组。我得到了该过滤条件数组的 json 字符串化字符串。我无法将其转换为 c# 条件对象列表

以上是关于在 C# 中动态查询 Mongo 集合的主要内容,如果未能解决你的问题,请参考以下文章

如何使用 Linq 在 Mongo C# 2.2 驱动程序中查询嵌套列表?

MongoDB 的功能

为啥MongoDB适合大数据的存储

mongodb资料汇总

高可用的MongoDB集群

Mongoose:如何向模式添加动态索引?