将数据上传到Mongolab数据库

时间:2014-05-15 18:30:50

标签: c# mlab

我正在尝试使用C#将元素插入到MongoLab数据库(沙盒计划)中(通过解析xml文件,但这不是相关部分)。

    var connectionString = "mongodb://user:pass@ds011111.mongolab.com:11111/db";
        var server = client.GetServer();
        var database = server.GetDatabase("mydb");
        var elementCollection = database.GetCollection<Entity>("entities");
        XmlDocument doc = new XmlDocument();
        doc.LoadXml(elementxml);
        XmlNodeList elementList = doc.GetElementsByTagName("element");
        foreach (XmlNode element in elementList) 
        {
            var t = new Entity();
            t.Name = element.FirstChild.InnerText;
            elementCollection.Insert(t); // this causes the error below
        }

这是我得到的消息:

WriteConcern detected an error 'not authorized for insert on mydb.entities'. (Response 
was { "err" : "not authorized for insert on mydb.entities", "code" : 16544, "n" : 0, 
"lastOp" : { "$timestamp" : NumberLong(0) }, "connectionId" : 33932414, "ok" : 1.0 }).

如果我在localhost上运行相同的代码,一切都按预期工作

如果我使用mongo / shell插入一个元素,我会得到Cannot use commands write mode, degrading to compatability mode,但它可以正常工作

这是否意味着我无法使用数据(来自C#)填充我的mongolab数据库,因为我没有作为Sandbox用户的正确权限?如果是这样的话,我的选择是什么?

1 个答案:

答案 0 :(得分:2)

问题似乎是您正在对“db”数据库进行身份验证,但尝试使用“mydb”数据库。除特权/管理员用户外,大多数用户只能访问一个数据库,因此会出现not authorized错误。我们使用身份验证运行所有数据库,而MongoDB默认值(您可能在本地使用)不需要身份验证;这就是为什么你没有在本地看到这个问题。

您应该从URI中获取要使用的数据库。这是我们example中的Language Center

  // Standard URI format: mongodb://[dbuser:dbpassword@]host:port/dbname

  String uri = "mongodb://user:pass@host:port/db";

  MongoUrl url = new MongoUrl(uri);
  MongoClient client = new MongoClient(url);
  MongoServer server = client.GetServer();
  MongoDatabase db = server.GetDatabase(url.DatabaseName);

如果这不能解决问题,请尝试我们的connectivity troubleshooting guide。特别是,接下来我要看的是您是否使用了正确的凭据(请参阅“检查您的数据库凭据”一节)。

最后,如果您仍有问题或有任何其他问题,请随时与support@mongolab.com联系。