在.Net中实现mongo shell功能

时间:2012-02-14 17:56:27

标签: .net shell mongodb

好奇心,我想知道,有人会如何在.Net中实现自定义mongo shell。允许用户在mongo shell中执行完全相同的操作,但在.Net中实现,可以选择增强用户体验。

我发现这个帖子告诉我,我不能使用官方10gen驱动程序来实现这个目标:Using MongoDB shell commands on MongoDB 10Gen's driver

这样做的恰当方法是什么?我想最终的自定义解决方案是手动将mongo shell的源代码转换为.Net?

我非常感谢任何建议,因为我在很长一段时间内都在谷歌上搜索答案。谢谢你提前!

2 个答案:

答案 0 :(得分:0)

所以第一个问题,是否有一个特殊的原因,你想要这样做?

首先,您可以mongo.execmd通过PowerShell访问shell。制作托管其中任何一个的控制台应用程序非常简单。

最重要的是,MongoDB驱动程序基本上已经支持所有shell功能。实际上,所有驱动程序都只是将JS语法翻译成对于给定语言更合理的东西。所以你真的不需要这样的“shell”来从代码中使用MongoDB。

如上所述,有几种方法可以 在.NET中编写自己的shell,但我不清楚为什么你想要这样做。你是在尝试一个“有趣”的项目吗?您是否尝试向用户提供查询支持?你有一些应用需要“下拉”到连接的shell吗?

您是否正在努力完成某些具体事宜?

如果您可以指定希望“shell”完成的内容,我可以使用更多详细信息更新此答案。


  

我不想为用户提供查询支持,同时以一种很好的方式呈现结果。

如果你只想把它写成一个查询引擎,那么用C#编写它应该很容易。这只是一些简单的解析。您可以获取查询的JSON部分并将其解析为BSonDocument,然后将其传递给MongoDB驱动程序中的查询。返回值将是您可以根据需要格式化的另一个BSonDocument

当然,如果你想提供一个查询工具,你可以比shell更好。看一下用.NET编写的MongoVue或MongoExplorer。这些是“ad-hoc”查询的更好版本。

答案 1 :(得分:0)

“你在mongo shell中做同样事情的请求”的最佳答案取决于你所想的“完全相同的事情”。

在最低级别,mongo shell只使用记录的“有线协议”发送消息,这有点围绕着BSON数据,即JSON的文档化二进制版本/扩展。因此,在较低级别(通过TCP / IP发送消息),您可以执行任何操作。

稍微高一点,mongo shell包含一个JavaScript“引擎”,目前发布的版本是Mozilla Foundation的SpiderMonkey 1.7版本,也是开源的。未来的版本将使用谷歌的V8 JavaScript引擎,再次开源并可供下载。 shell为这些引擎提供了一些本机代码函数:请参阅MongoDB源代码中的engine_spidermonkey.cpp和engine_v8.cpp。

在更高级别,shell包含一些用JavaScript编写的“辅助函数”,可以简化键入某些命令。您可以通过键入函数调用的名称并从括号中删除来从shell的提示中看到这些函数:键入“sleep(500)”将睡眠500毫秒,键入“sleep”将显示“sleep”调用“nativeHelper”。申请(sleep_,arguments)“。所有这些辅助函数都在MongoDB源代码的“shell”目录中的.js文件中,您可以下载它。

除此之外,还有一个命令行循环,它提供命令行编辑和调用,用于处理调用命令行参数的代码和用于读取和写入BSON格式数据的代码,用于与服务器通信,非常类似于C#驱动程序提供。

因此,您可以使用对您有帮助的任何代码,或者自己编写类似或不同的代码。没有任何魔法隐藏起来,它都是开源的。

如果你知道你想要完成什么并且不知道如何做某事的细节,请问你的具体问题,希望你得到的答案不如这个。