我想在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函数被折旧之后。 因此,我无法将脚本解析为可以执行的内容。
需要帮助。
谢谢
答案 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)