繁体   English   中英

从Mongo C#驱动程序执行硬编码命令

[英]Execute hard coded command from Mongo C# driver

我正在寻找一种直接从C#代码执行硬编码Mongo更新的方法。 我知道如何在C#中正确实现该方案,但是希望有一种方法可以在执行过程中删除字符串。

以下在Robo上有效,并且是我想从C#执行的功能:

db.getCollection('Routing').update(
{}, 
{
    $pull: {'Updates': {'RecordNumber': '33'}}
},
{
    "multi" : true
});

有没有办法直接从我的C#代码中将其作为硬编码字符串执行? 我已经对BsonDocumentCommand和RunCommandAsync()进行了实验,但是由于它似乎不是为更新而设计的,因此无法找到一种使其执行更新的方法。 https://mongodb.github.io/mongo-csharp-driver/2.5/apidocs/html/M_MongoDB_Driver_MongoDatabaseBase_RunCommandAsync__1.htm

我是否缺少使用C#驱动程序执行硬编码Mongo查询的一些非常明显的方法?

提前致谢!

我创建了一个简短示例说明您可以采用的方法。 这并不涵盖整个问题,但它也许是您可以尝试解析整个命令的一种途径。

var cmd = "db.getCollection('Routing').update({ }, {  $pull: { 'Updates': { 'RecordNumber': '33'} } },{\"multi\" : true}); ";
// Part 0 = 'db', reject. Part 1 = getCollection('Routing'). Part 2 = update...
var parts = cmd.Split('.');

// Capitalize first letter to comply with C# naming, then get rid of the parameters
var function1 = parts[1].First().ToString().ToUpper() + parts[1].Substring(1).Split('(');
// Get contents of single-quotes
var param1 = parts[1].Split('\'')[1].Split('\'')[0];

var collection = (IMongoCollection<object>)db.GetType().GetMethod(function1).Invoke(db, new object[] { param1 });

无论如何,我建议避免编写代码解析器,尤其是在命令是硬编码的并且在运行时不会更改的情况下。 但是,如果不可避免,则应采用编程方法调用。 只是要注意查询可能越复杂,处理它所需要的代码就越高级。 希望这可以帮助!

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM