我在向一个mongoLab实例插入文档时遇到问题。
我正在使用这个命令连接到实例:
MongoClient client = new MongoClient(new MongoClientURI(uri));
与uri
看起来像这样:
mongodb://heroku_app1234:random_password@ds029017.mongolab.com:29017/heroku_app1234
用户heroku_app1234
状态为readOnly
~ false
插入我的文档,像这样:
Jongo jongo = new Jongo(client.getDB("myDb"));
MongoCollection collection = jongo.getCollection("myCollection");
collection.save(someBean);
client.close();
和服务器崩溃的异常:
Caused by: com.mongodb.WriteConcernException: { "serverUsed" : "ds029017.mongolab.com:29017" , "err" : "not authorized for insert on myDb.myCollection" , "code" : 16544 , "n" : 0 , "lastOp" : { "$ts" : 0 , "$inc" : 0} , "connectionId" : 21382 , "ok" : 1.0}
看起来您正在连接并验证到一个数据库(heroku_app1234),但随后切换到另一个(myDB)。你得到错误not authorized for insert on myDb.myCollection
作为结果。
当您获取要传递给Jongo()
构造函数的数据库时,您应该确保获取与URI中使用的相同的数据库。看起来您正在使用Java。如果是这样,对代码的调整可能适合您:
MongoClientUri uri = new MongoClientUri("mongodb://heroku_app1234:random_password@ds029017.mongolab.com:29017/heroku_app1234");
MongoClient client = new MongoClient(uri);
Jongo jongo = new Jongo(client.getDB(uri.getDatabase()));
MongoCollection collection = jongo.getCollection("myCollection");
collection.save(someBean);
client.close();
我们的语言中心有一些基本的连接示例,包括一个Java的示例,您可以随意从中提取。
// Standard URI format: mongodb://[dbuser:dbpassword@]host:port/dbname
MongoClientURI uri = new MongoClientURI("mongodb://user:pass@host:port/db");
MongoClient client = new MongoClient(uri);
DB db = client.getDB(uri.getDatabase());