Реализация функциональности оболочки монго в .Net - PullRequest
2 голосов
/ 14 февраля 2012

Из любопытства я хотел бы знать, как кто-нибудь может реализовать собственную оболочку монго в .Net.позволяя пользователю делать то же самое, что и вы, в оболочке mongo, но реализован в .Net с возможностью улучшения взаимодействия с пользователем.

Я нашел этот поток, который говорит мне, что я не могу использоватьофициальный драйвер 10gen для архивирования: Использование команд оболочки MongoDB в драйвере MongoDB 10Gen

Каков подходящий способ сделать это?Полагаю, что окончательным решением было бы преобразовать исходный код оболочки mongo в .Net вручную?

Любые предложения очень ценятся, так как я уже давно ищу ответы на них.Заранее спасибо!

Ответы [ 2 ]

0 голосов
/ 16 февраля 2012

Лучший ответ на ваш запрос «делать точно такие же вещи, как вы можете в оболочке монго» зависит от того, что вы считаете «точно такими же вещами».

На самом низком уровнеОболочка mongo просто отправляет сообщения, используя документированный «проводной протокол», который немного оборачивается вокруг данных BSON, документированной двоичной версии / расширения JSON.Таким образом, на низком уровне (отправляя сообщения по TCP / IP) вы можете делать все, что захотите.

На чуть более высоком уровне оболочка mongo включает в себя JavaScript-движок, который в текущих версияхSpiderMonkey версия 1.7 от Mozilla Foundation, также с открытым исходным кодом.В будущей версии будет использоваться JavaScript-движок Google V8, снова с открытым исходным кодом и доступный для загрузки.Оболочка предоставляет некоторые функции собственного кода для этих движков: см. Engine_spidermonkey.cpp и engine_v8.cpp в исходном коде MongoDB.

На еще более высоком уровне оболочка включает некоторые «вспомогательные функции», написанные на JavaScriptэто упрощает ввод некоторых команд.Вы можете увидеть эти функции в командной строке, набрав имя вызова функции и не обращая внимания на круглые скобки: ввод «sleep (500)» будет спать в течение 500 миллисекунд, а «sleep» покажет, что «sleep» вызывает «nativeHelper».применить (сон_, аргументы) ".Все эти вспомогательные функции находятся в файлах .js в каталоге «shell» в исходном коде MongoDB, который вы можете загрузить.

Помимо этого, есть цикл командной строки, который обеспечивает редактирование и вызов командной строки,код для обработки аргументов в вызывающей командной строке и код для чтения и записи данных в формате BSON для связи с сервером, очень похожий на то, что обеспечивает драйвер C #.

Итак, вы можете использовать любой из этого кода, которыйВам может пригодиться или написать подобный или другой код самостоятельно.В действительности нет никакой скрытой магии, все это с открытым исходным кодом.

Если вы знаете, чего хотите достичь, и застряли на деталях того, как что-то сделать, задайте свой конкретный вопрос и, надеюсь, выполучите меньше общих ответов, чем этот.

0 голосов
/ 15 февраля 2012

Итак, первый вопрос, есть ли конкретная причина, по которой вы хотите сделать это?

Прежде всего, вы можете получить доступ к оболочке через mongo.exe из cmd или PowerShell. Создание консольного приложения, в котором размещается любой из них, довольно тривиально.

Кроме того, драйвер MongoDB уже поддерживает практически все функции оболочки. Фактически, все драйверы - это просто перевод синтаксиса JS в нечто более разумное для данного языка. Так что вам не нужна такая «оболочка» для использования MongoDB из кода.

Тем не менее, есть несколько способов, которыми вы могли бы написать свою собственную оболочку в .NET, но мне не ясно, почему вы хотите сделать это. Вы просто пробуете проект "для удовольствия"? Вы пытаетесь обеспечить поддержку запросов пользователям? У вас есть какое-нибудь приложение, которое нужно «выпустить» на подключенную оболочку?

Есть что-то конкретное, что вы пытаетесь достичь?

Я могу обновить этот ответ с более подробной информацией, если вы можете указать, что вы хотите, чтобы эта "оболочка" выполняла.


Я не хочу обеспечивать поддержку запросов для пользователя и в то же время представлять результат в хорошем виде.

Если все, что вы хотите написать, это механизм запросов, это должно быть довольно легко написать в C #. Это просто простой анализ. Вы можете взять JSON-часть запроса и проанализировать ее в BSonDocument, а затем передать ее в запрос в драйвере MongoDB. Возвращаемое значение будет другим BSonDocument, которое вы можете отформатировать по своему усмотрению.

Конечно, если вы хотите предоставить инструмент запросов, вы можете сделать намного лучше, чем просто оболочка. Взгляните на MongoVue или MongoExplorer, которые написаны на .NET. Это гораздо лучшие версии «специальных» запросов.

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