2015-08-13 3 views
1

У меня есть хранимую функцию JS в MongoDB, как и в Optimistic Loop pattern
Мне нужно, чтобы выполнить его с MongoDB C#/.NET driver 2.0.1 -MongoDb версии 3.0.5-.MongoDB .Net Driver 2.x - Как выполнить хранимую функцию JS

Я могу выполнить его из MongoDB оболочки так:

myFunc({by:"Bob", on:ISODate("2015-10-02T01:11:18.965Z")}, db.myCollection) 

db.Eval был deprecated since 3.x:
я подумал, что db.runCommand() может делать то, что я хочу. Но не могу понять, как на самом деле представлять вызов функции с JsonCommand/ObjectCommand/BsonDocumentCommand
RunCommand(String), похоже, устарели.

Так как я могу запустить хранимую функцию с клиента C# /. NET?

Edit 1: Я мог бы реализовать шаблон в C#, но не хотите, накладные расходы чтения, прежде чем писать, конечно, это будет быстрее, если работать на сервере MongoDB.

Edit 2: До сих пор я понял, что заявление в Edit 1 является неправильным, потому что запуск функции от mongo.exe клиента будет делать то же самое количество вызовов, если я реализую шаблон в C#, поэтому нет никакой выгоды реализации автоматической инкрементации счетчики с использованием JS-функций.

+0

Если вы работаете как то из «оболочки», то это не на самом деле работает на «сервер», но на «клиента» (то есть то, что [ 'db.loadServerScripts()'] (http://docs.mongodb.org/manual/reference/method/db.loadServerScripts/#db.loadServerScripts)), единственный способ, которым все работает на сервере, - это «eval "или в процессоре JavaScript, например mapReduce или, возможно,' $ where'. Оба имеют ограничения и «предупреждения». Практически все, что вы утверждаете, что вам нужен «серверный» JavaScript-код в моде, лучше реализуется в собственных методах. –

+0

@BlakesSeven, да, я запускаю материал из оболочки, правильно ли я правильно понял, что если бы я должен был использовать шаблон оптимистического цикла в C# (двойное путешествие для чтения и записи), то я не буду набирать скорость (экономя количество поездок), так же, как и происходят из оболочки? Благодаря! –

+0

Что вам нужно «правильно» понять, так это то, что есть проблемы с выполнением кода на стороне сервера в движке JavaScript, в соответствии с любыми операциями управления потоком, которые, по вашему мнению, вы пишете. Вы только «думаете» вам это нужно из-за вашего нынешнего дизайна и подхода к проблеме, которую вы действительно имеете. То, что вы действительно должны «делать», - это пересмотреть требуемый дизайн и, возможно, задавать вопросы о проблемах, которые вы хотите решить, которые в первую очередь привели вас к вашему дизайну. Скорее всего, если вы это сделаете, другие будут предлагать лучшие способы. Вещи получают «устаревшие» по уважительным причинам. –

ответ

0

Я думаю, что вы можете использовать это:

var cmd = new JsonCommand<BsonDocument>("{ eval: \"myFunc({by:\"Bob\", on:ISODate(\"2015-10-02T01:11:18.965Z\")}, db.myCollection)\" }"); 
var result = db.RunCommand(cmd);