我正在寻找一种直接从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查询的一些非常明显的方法?
谢谢!
答案 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 });
无论如何,我建议避免编写代码解析器,尤其是当命令是硬编码的并且在运行时不会更改时。但是,如果不可避免,则应采用编程方法调用。只是要注意查询可能越复杂,处理它所需要的代码就越高级。希望这会有所帮助!