【问题标题】:Connecting MongoDB & Java via Eclipes通过 Eclipse 将 MongoDB 连接到 Java
【发布时间】:2018-04-13 08:30:03
【问题描述】:

我正在尝试创建一个简单的连接并使用 java (eclipse 4.7.1a) 将文档插入本地 MongoDB 实例。 MongoDB 已经启动并运行,并且能够通过“Compass”进行操作。

          package com;
          import com.mongodb.MongoClient;
          import com.mongodb.WriteConcern;
          import com.mongodb.DB;
          import com.mongodb.DBCollection;
          import com.mongodb.BasicDBObject;
          import com.mongodb.DBObject;
          import com.mongodb.DBCursor;
          import java.net.UnknownHostException;
          import java.util.Date;
          import java.util.List;
          import java.util.Arrays;

          public class connectToDB {
               public static void main( String args[] ) {

          try{

             // To connect to mongodb server
             MongoClient mongoClient = new MongoClient( "localhost" , 27017                                       
          );

             // Now connect to your databases
             DB db = mongoClient.getDB("test");
             System.out.println("Connect to database successfully");

             // if collection doesn't exists, MongoDB will create it for you    
             DBCollection coll = db.getCollection("testCollection");
             System.out.println("Collection coll selected successfully");

             // insert  
             List<Integer> books = Arrays.asList(27464, 747854);
             DBObject documents = new BasicDBObject("_id", "jo")
                                         .append("name", "Jo Bloggs")
                                         .append("address", new BasicDBObject("street", "123 Fake St")
                                                                      .append("city", "Faketon")
                                                                      .append("state", "MA")
                                                                      .append("zip", 12345))
                                         .append("books", books);
             coll.insert(documents);
             System.out.println("Document added to Collection coll successfully");

             // update
             BasicDBObject query = new BasicDBObject();
             query.put("name", "Xo");

             BasicDBObject newDocument = new BasicDBObject();
             newDocument.put("name", "Jo Bloggs-updated");

             BasicDBObject updateObj = new BasicDBObject();
             updateObj.put("$set", newDocument);

             coll.update(query, updateObj);
             System.out.println("Document updated to Collection coll successfully");

             // find - search
             BasicDBObject searchQuery1 = new BasicDBObject();
             searchQuery1.put("name", "mkyong");
             DBCursor cursor = coll.find(searchQuery1);
             System.out.println("Selection from Collection coll done successfully");
             while (cursor.hasNext()) {
                System.out.println(cursor.next());
             }

             // delete
             BasicDBObject searchQuery2 = new BasicDBObject();
             searchQuery2.put("name", "Xo");
             coll.remove(searchQuery2);
             System.out.println("Document deleted from Collection mycol2 successfully");

          }catch(Exception e){
             System.err.println( e.getClass().getName() + ": " + e.getMessage() );
          }
       }

}

但是当执行时,在eclipse中出现以下错误。

Nov 01, 2017 2:19:31 AM com.mongodb.diagnostics.logging.JULLogger log
INFO: Cluster created with settings {hosts=[localhost:27017], mode=SINGLE,                 
requiredClusterType=UNKNOWN, serverSelectionTimeout='30000 ms', 
maxWaitQueueSize=500}
Exception in thread "main" java.lang.NoSuchMethodError: 
org.bson.BsonDocument.clone()Lorg/bson/BsonDocument;
at com.mongodb.connection.ClientMetadataHelper.
createClientMetadataDocument(ClientMetadataHelper.java:159)
at com.mongodb.connection.ClientMetadataHelper.
createClientMetadataDocument(ClientMetadataHelper.java:149)
at com.mongodb.connection.InternalStreamConnectionFactory.<init>
 (InternalStreamConnectionFactory.java:37)
at com.mongodb.connection.DefaultClusterableServerFactory.
create(DefaultClusterableServerFactory.java:58)
at com.mongodb.connection.BaseCluster.createServer(BaseCluster.java:359)
at com.mongodb.connection.SingleServerCluster.<init>
(SingleServerCluster.java:52)
at com.mongodb.connection.DefaultClusterFactory.
createCluster(DefaultClusterFactory.java:147)
at com.mongodb.Mongo.createCluster(Mongo.java:726)
at com.mongodb.Mongo.createCluster(Mongo.java:720)
at com.mongodb.Mongo.<init>(Mongo.java:290)
at com.mongodb.Mongo.<init>(Mongo.java:285)
at com.mongodb.Mongo.<init>(Mongo.java:281)
at com.mongodb.MongoClient.<init>(MongoClient.java:186)
at com.mongodb.MongoClient.<init>(MongoClient.java:163)
at com.mongodb.MongoClient.<init>(MongoClient.java:153)
at com.connectToDB.main(connectToDB.java:25)

MongoDB 版本:v3.4.9 使用以下 jar 文件。 bson 3.0.4.jar & mongo-java-driver-3.5.0.jar

谁能帮我解释一下为什么会出现这个错误?

【问题讨论】:

    标签: java eclipse mongodb bson mongo-java


    【解决方案1】:

    我从代码的引用库中删除了“bson-3.0.2.jar”,它可以工作。 正如错误消息所说,

    NoSuchMethodError: org.bson.BsonDocument.clone()Lorg/bson/BsonDocument;

    bson jar 和 mongodb java driver 之间似乎有某些方法依赖崩溃了。

    【讨论】:

      【解决方案2】:

      在您使用 MongoDB 代码运行简单的 hello world 程序之前,您的代码运行良好,

              public class connectToDB {
                 public static void main( String args[] ) {
      
                        System.out.println("Hello world");
      
                      }
                }
      

      如果它有效,那么将您的 MongoDB 代码放在主目录中并再次运行它。如果它不起作用,那么您首先需要学习“如何使用 Eclipse IDE?”在你进入数据库之前。

      这是您的代码的结果。

      这是您的数据在数据库中的样子。

      【讨论】:

      • 嗨,乔伊,谢谢您的评论。我是一个 pl/sql 人,所以这些天来尝试一些东西。根据你的建议,我已经用简单的 java 代码和 main 进行了测试,它可以工作。但是一旦我定义了一个 Mongo DB 客户端对象错误又回来了。 MongoClient mongoClient = new MongoClient( "localhost" , 27017 );我使用的 jar 文件有什么问题吗?
      • 如果我没记错的话,可能是你的 Mongodb jar 库有问题,好吧,删除所有 Mongodb 库并从这里下载 jar 文件,Mongodb 记住不要添加任何额外的 jar,它应该可以工作.
      猜你喜欢
      • 2020-02-07
      • 2014-10-15
      • 2020-04-16
      • 1970-01-01
      • 2014-09-04
      • 2020-02-18
      • 2016-04-29
      • 1970-01-01
      相关资源
      最近更新 更多