我正在尝试使用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用户的正确权限?如果是这样的话,我的选择是什么?
答案 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联系。