C#中如何直接执行字符串形式的MongoDB原生查询语句?
如何在C#中执行字符串形式的MongoDB查询语句
可以实现,C#官方MongoDB驱动支持对应操作,具体实现方案如下:
前置依赖
首先安装NuGet官方驱动包:MongoDB.Driver
方案1:直接执行完整Mongo Shell风格查询字符串
如果需要直接执行类似db.getCollection("somecollection").find({})的完整Shell格式字符串,可以通过构造JS执行命令实现,代码示例如下:
using MongoDB.Bson; using MongoDB.Driver; // 初始化Mongo连接 var client = new MongoClient("mongodb://你的MongoDB连接串"); var db = client.GetDatabase("你的目标数据库名称"); // 你的字符串形式查询语句 string query = "db.getCollection(\"somename\").find({})"; // 构造执行命令 var executeCommand = new BsonDocumentCommand<BsonDocument>(new BsonDocument { { "eval", query }, { "nolock", true } }); // 执行查询获取结果 var result = db.RunCommand(executeCommand);
注意:MongoDB 3.0及以上版本默认禁用
eval命令,该方案存在JS注入安全风险,仅推荐测试环境、内部可控场景下使用,不建议生产环境使用。
方案2:生产环境推荐的动态查询方案
如果你的需求只是动态传入查询过滤条件,不需要执行完整的Shell语句,更推荐将查询条件转为JSON字符串后解析为Bson对象执行,无注入风险且性能更优,代码示例如下:
using MongoDB.Bson; using MongoDB.Driver; // 初始化Mongo连接 var client = new MongoClient("mongodb://你的MongoDB连接串"); var db = client.GetDatabase("你的目标数据库名称"); var collection = db.GetCollection<BsonDocument>("somename"); // 字符串形式的查询过滤条件 string filterJson = "{\"age\": { $gt: 18 }, \"city\": \"北京\"}"; var filter = BsonDocument.Parse(filterJson); // 执行查询 var result = collection.Find(filter).ToList();
内容的提问来源于stack exchange,提问作者user425799
相关产品推荐
相关产品推荐

