我是mongo
的新手,使用 Java Mongo Driver 连接并执行与数据库相关的操作。我已经阅读了mongodb
中的角色,并且知道角色“dbAdmin”对他在获得身份验证后运行的命令有一些限制。
我的任务是将集合从 UnCapped更新为上限。为此,从stackoverflow帖子中,我已阅读将集合复制到temp,删除旧集合并将此temp重命名为所需集合。
我现在看到dbAdmin登录的一个问题:复制集合。我使用的代码是:
MongoCursor<Document> cur = selectedCollection.find().iterator();
while (cur.hasNext()) {
Document obj = cur.next();
tempCollection.insertOne(obj);
}
在调用.iterator()时,代码抛出MongoQueryException,说“未在myDb上授权执行命令{find:”testCapped“,filter:{}}”
在其他帖子中,我使用了以下代码:
DBCursor dbCursor = mongoInstance.getDB(dbName)
.getCollection(selectedCollectionName)
.find();
while (dbCursor.hasNext()){
//
}
在此{@ 1}}中,代码会抛出相同的错误..! 对此有何选择?
答案 0 :(得分:1)
MongoDB版本 - 3.2.6
Mongo Java Driver - 3.2.2
请检查您是否拥有以下步骤中提到的所有内容: -
1)具有&#39; dbAdmin&#39;的用户所需的权限分配给它的角色: -
> db.getUser("dbAdminUser");
{
"_id" : "test.dbAdminUser",
"user" : "dbAdminUser",
"db" : "test",
"roles" : [
{
"role" : "dbAdmin",
"db" : "test"
},
{
"role" : "readWrite",
"db" : "test"
}
]
}
2)如果您没有拥有“dbAdmin”的用户。分配给它的角色,使用下面的脚本创建用户&#39; dbAdminUser&#39;并指定适当的角色。您可能需要更改数据库名称&#34; test&#34;相应强>
db.createUser( { user: "dbAdminUser",
pwd: "password",
roles: [ { role: "dbAdmin", db: "test" },
"readWrite"] },
{ w: "majority" , wtimeout: 5000 } );
3)从无上限集合复制到上限集合的代码
这是与正确的用户连接到数据库时相似的代码。我使用了上面步骤中创建的用户&#34; dbAdminUser&#34; 。
public static void main(String[] args) {
MongoClient mongoClient = null;
MongoCredential mongoCredential = MongoCredential.createScramSha1Credential("dbAdminUser", "test",
"password".toCharArray());
mongoClient = new MongoClient(new ServerAddress("localhost", 27017), Arrays.asList(mongoCredential));
DB db = mongoClient.getDB("test");
DBCursor dbCursor = db.getCollection("Account").find();
while (dbCursor.hasNext()) {
DBObject dbObject = dbCursor.next();
System.out.println(dbObject);
db.getCollection("AccountCapped").insert(dbObject);
}
mongoClient.close();
}
答案 1 :(得分:0)
你面临两个可能的问题(如果第一个解决方案在正确完成后无法正常工作,第二个可能会成立):
您未进行身份验证
这很容易解决,只需使用MongoClient client = new MongoClient(new MongoClientURI("mongodb//user:password@localhost/database"))
用适当的字符串替换user
,password
,localhost
和database
。
您没有创建具有适当角色的用户
为此,您必须改为引用mongodb creating user with specific role。