MongoDB
 sql >> डेटाबेस >  >> NoSQL >> MongoDB

जावा से स्थानीय mongoDB से कनेक्ट नहीं हो सकता

मैंने आपका कोड अपने स्वयं के (चल रहे) मोंगोडीबी सर्वर के विरुद्ध चलाया, और मैं वही त्रुटि देख सकता हूं। हालांकि मुझे जो मारा वह यह था कि त्रुटि "समय समाप्त होने से पहले 30000ms प्रतीक्षा कर रही है", लेकिन कोड 30 सेकंड से भी कम समय में पूरा हो जाता है। यह एक संकेत देता है कि समस्या क्या है।

याद रखें कि यह एसिंक्स है - इसलिए आप सभी ऑपरेशनों को एक ही थ्रेड पर क्रमिक रूप से चलाने की उम्मीद नहीं कर सकते। वास्तव में जो हो रहा है वह है main डेटाबेस में आपकी कॉल समाप्त होने से पहले विधि समाप्त हो रही है।

यदि आप समाप्त होने से पहले परिणामों के वापस आने की प्रतीक्षा करने के लिए अपना कोड बदलते हैं, तो आपको अधिक उचित परिणाम मिलते हैं।

कोड:

public static void main(String[] args) throws InterruptedException {
    CountDownLatch latch = new CountDownLatch(1);
    // connect to the local database server,default:127.0.0.1:27017
    MongoClient mongoClient = MongoClients.create();
    // get handle to "testDB" database
    MongoDatabase database = (MongoDatabase) mongoClient.getDatabase("testDB");
    SingleResultCallback<Void> callbackWhenFinished = new SingleResultCallback<Void>() {
        @Override
        public void onResult(final Void result, final Throwable t) {
            System.out.println("Operation Finished!");
            latch.countDown();
        }
    };
    // get a handle to the "test" collection
    MongoCollection<Document> collection = database.getCollection("test");
    collection.insertOne(new Document("lala", "hehe"), callbackWhenFinished);

    latch.await();
}

परिणाम:

Aug 11, 2015 9:31:34 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: Cluster created with settings {hosts=[localhost:27017], mode=SINGLE, requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', maxWaitQueueSize=500}
Aug 11, 2015 9:31:35 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: No server chosen by PrimaryServerSelector from cluster description ClusterDescription{type=UNKNOWN, connectionMode=SINGLE, all=[ServerDescription{address=localhost:27017, type=UNKNOWN, state=CONNECTING}]}. Waiting for 30000 ms before timing out
Aug 11, 2015 9:31:35 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: Opened connection [connectionId{localValue:1, serverValue:4}] to localhost:27017
Aug 11, 2015 9:31:35 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: Monitor thread successfully connected to server with description ServerDescription{address=localhost:27017, type=STANDALONE, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 0, 2]}, minWireVersion=0, maxWireVersion=3, electionId=null, maxDocumentSize=16777216, roundTripTimeNanos=1281647}
Aug 11, 2015 9:31:35 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: Opened connection [connectionId{localValue:2, serverValue:5}] to localhost:27017
Operation Finished!

वैसे, कोड को और भी सरल बनाया जा सकता है, खासकर जब से आप कहते हैं कि आप Java 8 का उपयोग कर रहे हैं:

public static void main(String[] args) throws InterruptedException {
    CountDownLatch latch = new CountDownLatch(1);
    // connect to the local database server,default:127.0.0.1:27017
    MongoClient mongoClient = MongoClients.create();
    // get handle to "testDB" database
    MongoDatabase database = mongoClient.getDatabase("testDB");
    // get a handle to the "test" collection
    MongoCollection<Document> collection = database.getCollection("test");

    collection.insertOne(new Document("lala", "hehe"),
                         (result, t) -> {
                             System.out.println("Operation Finished!");
                             latch.countDown();
                         });

    latch.await();
}


  1. Redis
  2.   
  3. MongoDB
  4.   
  5. Memcached
  6.   
  7. HBase
  8.   
  9. CouchDB
  1. मैं MongoDB में मानचित्र/कमी का उपयोग कैसे करूं?

  2. Mongodb $lookup _id . के साथ काम नहीं कर रहा है

  3. NodeJS + Mongo:यदि मौजूद नहीं है तो डालें, अन्यथा - अपडेट करें

  4. मिलान करने वाले ऐरे तत्व का चयन करें और चयनित फ़ील्ड लौटाएं

  5. MongoDb में नेस्टेड क्वेश्चन कैसे बनाएं जो नेस्टेड Sql चुनिंदा क्वेश्चन की तरह काम करता है