Выполнить запрос оболочки dong монго из драйвера c # mongo (последняя версия) - PullRequest
0 голосов
/ 26 сентября 2018

Я хочу запустить запрос монго из C #.В настоящее время я использую драйвер 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, теперь я хочу выполнить этот скрипт из приложения c # с динамическим изменением значения объекта.Я надеялся, что он сможет проанализировать эти запросы и передать их в базу данных. RunCommand, но я не смог добиться какого-либо прогресса.

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

Этот код не выполняется при вызове десериализации с этой ошибкойсообщение: [Дополнительная информация: читатель JSON ожидал значение, но нашел 'db'.], что имеет смысл, так как скрипт недопустим в формате JSON.

После того, как функция eval mongo 3.0 устарела.Поэтому у меня возникают проблемы при разборе скрипта на что-то, что может быть выполнено.

Нужна помощь.

Спасибо

1 Ответ

0 голосов
/ 26 сентября 2018

db.RunCommand принимает JSON в качестве параметра ( документы ), пока вы пытаетесь передать свой сценарий напрямую.Вы можете передать свой скрипт в качестве значения, где ключ установлен на 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 само по себе устарело (объяснено здесь )

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...