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

时间:2018-08-02 00:37:43

标签: c# mongodb

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

以下内容可在Robo上使用,这是我想从C#中执行的内容:

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

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

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

谢谢!

1 个答案:

答案 0 :(得分:0)

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

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 });

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