从C#Mongo DB驱动程序执行Mongo DB Shell查询(最新)

时间:2018-09-26 14:52:42

标签: c# mongodb mongodb-query mongodb-.net-driver

我想在C#下的mongo查询下运行。当前,我正在使用mongodb C#驱动程序2.7

db.changelog.find({}).forEach(function(doc){
//make javascript object dynimacally 
var newDoc = {
    "key": "value",
    "doc": doc
}
db.changelog_log.insertOne(newDoc); })

这已成功运行到mongo shell中,现在我想从c#应用程序中执行该脚本并动态修改对象值。我希望它能够解析这些查询并将其传递给database.RunCommand,但是我却没有取得任何进展。

var bsonDoc = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>("query");
database.RunCommand(command);

该代码在调用Deserialize时失败,并显示以下错误消息:[其他信息:JSON阅读器原本需要一个值,但找到了'db'。]这是很有意义的,因为脚本不是有效的JSON。

在mongo 3.0 eval函数被折旧之后。 因此,我无法将脚本解析为可以执行的内容。

需要帮助。

谢谢

1 个答案:

答案 0 :(得分:2)

在尝试直接传递脚本时,

db.RunCommand将JSON作为参数(docs)。您可以将脚本作为值设置,其中键设置为eval。试试:

IMongoDatabase database = mongoClient.GetDatabase("databaseName");

var script = @"
    db.changelog.find({}).forEach(function(doc){
        var newDoc = {
            'key': 'value',
            'doc': doc
        }
    db.changelog_log.insertOne(newDoc); })
";


var doc = new BsonDocument()
{
    { "eval", script }
};

var command = new BsonDocumentCommand<BsonDocument>(doc);
var response = database.RunCommand(command);

尽管它可以正常工作(已在MongoDB 4.0上进行了测试),但必须记住eval本身已被弃用(解释为here