簡體   English   中英

如何在MongoDB中插入未經身份驗證的數據

[英]how do i insert data with no authentication in MongoDB

軟件桂

使用mongo Java驅動程序3.4.2

我正在CMD“ mongod”中使用此命令運行Mongodb。 我沒有使用“ mongod --auth”! 我不知道為什么它仍然給我例外。
就像在CMD中一樣,如果服務器未在--auth上運行,則無需提供用戶名和密碼。 同樣,我要實現。

我已經創建了將數據插入到mongo db中的應用程序,實際上,只有在我仍然遇到異常的情況下,才能成功插入數據,並且由於我正在使用swingworker,因此它對我的應用程序的運行速度變慢,因此我的應用程序在異常時間內凍結了一段時間。

那MongoDB驅動程序有限制嗎? 我們不能在沒有身份驗證的情況下插入數據。

   public void doJob() {
   server.progressbar.setVisible(true);
   server.progressbar.setIndeterminate(true);

    SwingWorker worker = new SwingWorker() {

        @Override
        protected void done() {
       server.progressbar.setIndeterminate(false);
       server.progressbar.setVisible(false);
        server.total.setText("");       
   CoonectToDB obj=new CoonectToDB();
    obj.callcollections();
    NoAuthCoonectToDB obj2=new NoAuthCoonectToDB();
    obj2.NoAuthconnectDB();

        }

        @Override
        protected void process(List chunks) {
            // Here you can process the result of "doInBackGround()"
            // Set a variable in the dialog or etc.

        }

        @Override
        protected Object doInBackground()  {

         try{ 
        server.newcol.setEnabled(false);
        server.ecoll.setEnabled(false);
        server.ubtn.setEnabled(false);
        String logid="Log-"+logname.getText();

        JList dataList=(loglist);
        int sixe=dataList.getModel().getSize();
        ArrayList arrayList = new ArrayList();
    for (int i = 0; i <sixe; i++) {
    arrayList.add(dataList.getModel().getElementAt(i));
     server.total.setText("Total Log-"+i);

    }
    System.out.println(arrayList);
    Iterator itr = arrayList.iterator();
    String host=hname.getText();
                    String port=spport.getValue().toString();
                    Integer pt = Integer.valueOf(port);                         
                     MongoClient mongoClient = new MongoClient(new ServerAddress(host, pt),            
                                MongoClientOptions.builder()
                                        .serverSelectionTimeout(2000)
                                        .build());

                       DB db = mongoClient.getDB( dbname.getText());
       DBCollection bookCollection = db.getCollection(collectionss.getSelectedValue().toString());
        BasicDBObject doc = new BasicDBObject(logid, arrayList);
        bookCollection.insert(doc);

         Icon icon = new ImageIcon("src\\images\\done.png");
         processimage.setIcon(icon);
        server.consolelog.setText("INFO: Data is inserted succsesfully");

         }catch(Exception e){
          server.consolelog.setText(e.toString());
         }finally{
          server.newcol.setEnabled(true);
          server.ecoll.setEnabled(true);
          server.ubtn.setEnabled(true);
            }

        return null;
        }
    };
    worker.execute();
}

這是例外

com.mongodb.MongoTimeoutException: Timed out after 2000 ms while waiting for a server that matches ReadPreferenceServerSelector{readPreference=primary}. Client view of cluster state is {type=UNKNOWN, servers=[{address=localhost:27017, type=UNKNOWN, state=CONNECTING, exception={com.mongodb.MongoSecurityException: Exception authenticating MongoCredential{mechanism=null, userName='', source='admin', password=<hidden>, mechanismProperties={}}}, caused by {com.mongodb.MongoCommandException: Command failed with error 18: 'Authentication failed.' on server localhost:27017. The full response is { "ok" : 0.0, "errmsg" : "Authentication failed.", "code" : 18, "codeName" : "AuthenticationFailed" }}}]

感謝你們對我的幫助

實際上,它解決了,我不知道為什么我在改變這條線后仍能工作。

       collectionss.getSelectedValue().toString();// Jlist

      Object value = collectionss.getSelectedValue().toString() ;   
      DBCollection bookCollection = db.getCollection(value.toString);

我不清楚,但我認為它必須對此SCRAM-SHA-1做一些事情。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM