MongoDB
 sql >> Cơ Sở Dữ Liệu >  >> NoSQL >> MongoDB

Không thể kết nối với mongoDB cục bộ từ java

Tôi đã chạy mã của bạn trên máy chủ MongoDB (đang chạy) của riêng tôi và tôi có thể gặp lỗi tương tự. Điều làm tôi ngạc nhiên là lỗi cho biết "Đang đợi 30000ms trước khi hết thời gian", nhưng mã hoàn thành trong vòng chưa đầy 30 giây. Điều này gợi ý về vấn đề là gì.

Hãy nhớ rằng đây là không đồng bộ - do đó bạn không thể mong đợi tất cả các hoạt động chạy tuần tự trên cùng một luồng. Điều thực sự đang xảy ra là main phương thức đang kết thúc trước khi cuộc gọi của bạn đến cơ sở dữ liệu kết thúc.

Nếu bạn thay đổi mã của mình để đợi kết quả trả về trước khi chấm dứt, bạn sẽ nhận được kết quả hợp lý hơn nhiều.

Mã:

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();
}

Kết quả:

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!

Nhân tiện, mã có thể được đơn giản hóa hơn nữa, đặc biệt là khi bạn nói rằng bạn đang sử dụng 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. GridFS trong Spring Data MongoDB

  2. Kết nối với MongoDB bằng trình điều khiển PDO

  3. Làm cách nào để thực hiện các phép nối lồng nhau (tham gia 3 hoặc nhiều bộ sưu tập) trong một đường dẫn tổng hợp MongoDB?

  4. Truy vấn trong tài liệu lồng nhau trong mongodb

  5. Làm thế nào để truy vấn cấu trúc cây một cách đệ quy với MongoDB?