c# - 从C#mongodb驱动程序执行mongodb shell查询(最新)

标签 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中,现在我想用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/

相关文章:

ruby-on-rails - 在 Ruby/Rails 中压缩十六进制字符串

java - 将base64编码的字符串存储在HBase中

c# - 不能在谓词中使用 IEnumerable<string>

c# - 从 url 下载 .xls 文件

c# - 如何在 Asp.Net Core 中制作可重用的 Controller

mongodb - 在使用MongoDB-mgo插入许多文档的同时,如何忽略重复的键错误并继续插入?

MongoDB - 使用全文搜索搜索单词和短语时的逻辑或

c# - 是否可以在word文档中呈现HTML

python - 如何为 mongodb 配置 settings.py ?

Node.js + mongoDB,mongojs $in 运算符出错