【问题标题】:Mongodb Exception String index out of range: -1Mongodb 异常字符串索引超出范围:-1
【发布时间】:2013-11-08 05:07:06
【问题描述】:

您好,我在 mongodb 上尝试了一个连接到 mongohq 的程序,但出现以下错误:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: -1
    at java.lang.String.substring(String.java:1958)
    at com.mongodb.MongoClientURI.<init>(MongoClientURI.java:186)
    at com.mongodb.MongoClientURI.<init>(MongoClientURI.java:138)
    at org.Mongoadded.main(Mongoadded.java:15)

我返回的代码是:

package org;

import java.net.UnknownHostException;
import java.util.Set;

import com.mongodb.DB;
import com.mongodb.MongoClient;
import com.mongodb.MongoClientURI;

public class Mongoadded {

    public static void main(String args[]) throws UnknownHostException{

        String texturi="mongodb://mymail@gmail.com:password@emma.mongohq.com:10045/mongo";
        MongoClientURI mongoURI=new MongoClientURI(texturi);
        MongoClient mongoclient=new MongoClient(mongoURI);

        DB db=mongoclient.getDB("bhv");
        db.authenticate(mongoURI.getUsername(), mongoURI.getPassword());

        Set<String> colls=db.getCollectionNames();
        for(String c:colls){
            System.out.println(c);
        }
    }

我使用的 mongo-java-driver 是 2.10.1 。 提前谢谢你

【问题讨论】:

  • 您的身份验证是否正确??你收到true 换成db.authenticate(mongoURI.getUsername(), mongoURI.getPassword()); 了吗??

标签: java mongodb mongohq


【解决方案1】:

看来问题出在用户名上:mymail@gmail.com

mongo 客户端驱动实际上是依靠@ 的索引来将身份验证信息与主机名分开。您的代码甚至没有到达db.authenticate 部分。它在构造函数 MongoClientURI(texturi)

处失败

【讨论】:

  • 这绝对是一个非常糟糕的答案。
【解决方案2】:

实际上我们必须为数据库创建一个新用户..并提交该值, 它不是帐户用户名,密码。它的 dbusernamedbpassword

我试过了,但它在 mongohq 中不起作用..

以同样的方式我在mongolab 中尝试过它工作正常。

如果有人知道如何在 mongohq 中进行操作,请告诉我谢谢!

【讨论】:

  • 嗨,我现在遇到了同样的问题。你能更具体地解释一下吗? dbusernamedbpassword 是什么?我的意思是,我可以在mLab Mongodb中创建一个新用户,但是如何在代码中使用它,比如getUsername()getPassword()
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-07-23
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-07
  • 2016-02-19
相关资源
最近更新 更多