从 C# 连接到 mongo(在远程服务器上)的最佳方式是什么?
到目前为止的故事
我一直在尝试从连接到 mongo 实验室的非常基本的 c# 控制台应用程序中进行简单的查找。
我能够使用 Mongo Shell 和 RoboMongo 进行连接并查询我设置的集合。但是我仍然无法对我的 c# 代码执行相同的操作——即使我使用的是完全相同的凭据。主要是每当我尝试针对我在数据库中设置的集合实际执行查找时超时。
所有的帮助信息/示例/等等都太旧了,没有用了。
我正在使用 mLabs mongo 连接模板 - 非常标准的东西
mongodb://<dbuser>:<dbpassword>@<serverName>.mlab.com:<port>/<databaseName>
并做非常标准的事情来尝试从集合中读取 - 但不行,它总是超时。隐藏在返回的异常中的是对身份验证失败的引用。检查各种对象,我发现其中一个与身份验证相关的成员是空白的。
所以重申这个问题 - 使用 C# 连接到远程 mongo 存储库的最佳方式是什么? 如果它包含处理所有好东西的最佳实践,例如,奖励积分集群、复制集等
最佳答案
演练:
我已经在 mongo labs (www.mlab.com) 上设置了一个帐户,并且能够通过他们的 Web UI 成功连接到它。
我创建了一个数据库,然后尝试使用 mongo shell 和 robomongo 连接到它——没有成功。
经过大量挖掘后,我找到了简单的答案 - 我需要创建一个额外的用户并授予该用户对数据库的特定访问权限。并使用该用户的凭据访问数据库。
所以我完成了所有这些,现在我可以使用 Mongo shell 和 RoboMongo 连接到数据库并查询集合。
但我仍然无法使用我的 C# 代码进行查询 - 完全相同的凭据(包括大小写) - 但我只是在尝试执行查找时超时。
我终于找到了这个:
http://stackoverflow.com/questions/30758668/how-to-get-connection-status-in-the-c-sharp-mongodb-driver-v2-0
它给了我一个线索,让我在创建客户端时尝试使用 MongoClientSettings 而不是 MongoUrl。
我想出了这段代码:
var credential = MongoCredential.CreateCredential(DatabaseName, UserName, Password);
var mongoClientSettings = new MongoClientSettings
{
Server = new MongoServerAddress(serverAddress, Port),
Credentials = new List<MongoCredential> {credential}
};
并且当我使用此表单中的凭据创建客户端时它起作用了。
奇怪的是,现在我已经成功地使用了 MongoClientSettings,我可以返回到使用 MongoUrl - 就好像 mLabs/mongo 服务器上有一些突出的值(value)事情的一面终于被正确地默认了。
每个步骤的完整调用 block 如下所示:
var mongoClientSettings = BuildMongoClientSettings();
var client = ClientConnection(mongoClientSettings);
var database = DatabaseConnection(client, DatabaseName);
var collection = CollectionConnection(database, CollectionName);
var data = collection.Find(_ => true).ToList(); // yes I know it's not async - that comes next
所有方法都非常标准,但这里是集合的方法:
private static IMongoCollection<BsonDocument> CollectionConnection(IMongoDatabase database, string collectionName)
{
var collection = database.GetCollection<BsonDocument>(collectionName);
return collection;
}
关于c# - 从 c# 连接到 mLab MongoDB 时遇到问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37934202/
我想为Heroku构建一个Rails3应用程序。他们使用Postgres作为他们的数据库,所以我通过MacPorts安装了postgres9.0。现在我需要一个postgresgem并且共识是出于性能原因你想要pggem。但是我对我得到的错误感到非常困惑当我尝试在rvm下通过geminstall安装pg时。我已经非常明确地指定了所有postgres目录的位置可以找到但仍然无法完成安装:$envARCHFLAGS='-archx86_64'geminstallpg--\--with-pg-config=/opt/local/var/db/postgresql90/defaultdb/po
尝试通过RVM将RubyGems升级到版本1.8.10并出现此错误:$rvmrubygemslatestRemovingoldRubygemsfiles...Installingrubygems-1.8.10forruby-1.9.2-p180...ERROR:Errorrunning'GEM_PATH="/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/ruby-1.9.2-p180@global:/Users/foo/.rvm/gems/ruby-1.9.2-p180:/Users/foo/.rvm/gems/rub
我正在使用Sequel构建一个愿望list系统。我有一个wishlists和itemstable和一个items_wishlists连接表(该名称是续集选择的名称)。items_wishlists表还有一个用于facebookid的额外列(因此我可以存储opengraph操作),这是一个NOTNULL列。我还有Wishlist和Item具有续集many_to_many关联的模型已建立。Wishlist类也有:selectmany_to_many关联的选项设置为select:[:items.*,:items_wishlists__facebook_action_id].有没有一种方法可以
我的最终目标是安装当前版本的RubyonRails。我在OSXMountainLion上运行。到目前为止,这是我的过程:已安装的RVM$\curl-Lhttps://get.rvm.io|bash-sstable检查已知(我假设已批准)安装$rvmlistknown我看到当前的稳定版本可用[ruby-]2.0.0[-p247]输入命令安装$rvminstall2.0.0-p247注意:我也试过这些安装命令$rvminstallruby-2.0.0-p247$rvminstallruby=2.0.0-p247我很快就无处可去了。结果:$rvminstall2.0.0-p247Search
由于fast-stemmer的问题,我很难安装我想要的任何rubygem。我把我得到的错误放在下面。Buildingnativeextensions.Thiscouldtakeawhile...ERROR:Errorinstallingfast-stemmer:ERROR:Failedtobuildgemnativeextension./System/Library/Frameworks/Ruby.framework/Versions/2.0/usr/bin/rubyextconf.rbcreatingMakefilemake"DESTDIR="cleanmake"DESTDIR=
我使用的是Firefox版本36.0.1和Selenium-Webdrivergem版本2.45.0。我能够创建Firefox实例,但无法使用脚本继续进行进一步的操作无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055)错误。有人能帮帮我吗? 最佳答案 我遇到了同样的问题。降级到firefoxv33后一切正常。您可以找到旧版本here 关于ruby-无法在60秒内获得稳定的Firefox连接(127.0.0.1:7055),我们在StackOverflow上找到一个类
当我尝试安装Ruby时遇到此错误。我试过查看this和this但无济于事➜~brewinstallrubyWarning:YouareusingOSX10.12.Wedonotprovidesupportforthispre-releaseversion.Youmayencounterbuildfailuresorotherbreakages.Pleasecreatepull-requestsinsteadoffilingissues.==>Installingdependenciesforruby:readline,libyaml,makedepend==>Installingrub
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
我正在尝试使用boilerpipe来自JRuby。我看过guide从JRuby调用Java,并成功地将它与另一个Java包一起使用,但无法弄清楚为什么同样的东西不能用于boilerpipe。我正在尝试基本上从JRuby中执行与此Java等效的操作:URLurl=newURL("http://www.example.com/some-location/index.html");Stringtext=ArticleExtractor.INSTANCE.getText(url);在JRuby中试过这个:require'java'url=java.net.URL.new("http://www