我想从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中,现在我想用modify object值从c应用程序中执行该脚本。我希望它能够解析这些查询并将它们传递给database.runcommand,但是我没有取得任何进展。
var bsonDoc = MongoDB.Bson.Serialization.BsonSerializer.Deserialize<BsonDocument>("query");
database.RunCommand(command);
该代码在调用反序列化时失败,并显示以下错误消息:[附加信息:JSON读取器需要一个值,但找到了“db”。]这非常有意义,因为脚本不是有效的JSON。
Mongo 3.0 eval函数被贬值后。
所以我很难将脚本解析成可以执行的东西。
需要帮助。
谢谢
最佳答案
db.RunCommand
在试图直接传递脚本时,将json作为参数(docs)。可以将脚本作为一个值传递,其中key设置为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)
关于c# - 从C#mongodb驱动程序执行mongodb shell查询(最新),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52520627/