[英]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.