📜  Java中的 MongoDB 教程

📅  最后修改于: 2022-05-13 01:54:18.674000             🧑  作者: Mango

Java中的 MongoDB 教程

MongoDB 是一个使用 C++ 开发的开源跨平台文档数据库。 MongoDB的一些特性是:

  • 高效高效的性能
  • 易于扩展
  • 高可用性
  • 它可以存储大量数据

它包含集合和文档形式的数据,而不是行和表。集合是一组文档。该集合没有架构。它以分层模型的形式表示数据,使用该模型可以轻松存储数组和其他数据结构。

MongoDB 的组件

下面列出了 MongoDB 的基本组件:

  1. id :该字段表示 MongoDB 中的唯一字段。该字段是默认创建的。
  2. Collection :它是一组 MongoDB 文档。它与单个数据库一起存在。
  3. 数据库:这是集合的容器。多个数据库可以存储在一个 mongoDB 服务器中。
  4. 文档:mongoDB 中的一条记录称为文档。它包含名称和值。
  5. 字段:它是文档中的名称-值对。
Table of contents:
1. Establishing connections to database
2. Creating a MongoDb collection
3. Getting a Collection
4. Inserting Values into MongoDb
5. Displaying the list of all Documents
6. Updating documents in the MongoDB
7. Deleting a Document
8. Dropping of a Collection
9. Displaying all the collections

建立与数据库的连接

为了建立连接,您必须提及数据库名称。如果没有提及名称,MongoDB 默认会创建一个数据库。

  1. 首先,导入建立连接所需的库。
  2. 这里,“ MongoClient ”用于为数据库创建客户端。
  3. MongoCredential ” 用于创建凭证。
  4. 最后,使用“ MongoDatabase ”访问数据库。
  5. 用户名将是:“ GFGUser ”,数据库名称将是“ mongoDb ”。
  6. 函数“.toCharArray()”用于将密码转换为字符数组。
  7. 函数“.getDatabase()”用于获取数据库。

以下代码建立与 MongoDB 的连接 ->

// Java program for establishing connections
// to MongoDb
  
import com.mongodb.client.MongoDatabase;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
  
public class ConnectionDB {
    public static void establishConnections()
    {
  
        try {
            MongoClient db
                = new MongoClient("localhost", 27017);
  
            MongoCredential credential;
            credential
                = MongoCredential
                      .createCredential(
                          "GFGUser", "mongoDb",
                          "password".toCharArray());
            System.out.println(
                "Successfully Connected"
                + " to the database");
  
            MongoDatabase database
                = db.getDatabase("mongoDb");
            System.out.println("Credentials are: "
                               + credential);
        }
        catch (Exception e) {
            System.out.println(
                "Connection establishment failed");
            System.out.println(e);
        }
    }
}

输出:

创建一个 MongoDb 集合:

要创建一个集合com.mongodb.client.MongoDatabase 类并使用createCollection() 方法。在这里,“database.createCollection()”创建了一个名为“GFGCollection”的集合。以下是创建集合的代码:

// Java program to create a MongoDb collection
  
import com.mongodb.client.MongoDatabase;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
  
public class Collection {
  
    public static void createCollection(
        String collectionName)
    {
  
        try {
            // establishConnections() Code
            // is defined above
            establishConnections();
  
            // Get the database instance
            MongoDatabase database
                = db.getDatabase("mongoDb");
  
            // Create the collection
            database.createCollection(collectionName);
            System.out.println(
                "Collection created Successfully");
        }
        catch (Exception e) {
            System.out.println(
                "Collection creation failed");
            System.out.println(e);
        }
    }
}

输出:

获取收藏

为了获取一个集合,使用MongoCollection.getCollection()方法。下面是这种方法的实现:

// Java program to retrieve a MongoDb collection
  
import com.mongodb.client.MongoDatabase;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
  
public class Collection {
  
    public static void getCollection(
        String collectionName)
    {
  
        try {
            // establishConnections() Code
            // is defined above
            establishConnections();
  
            // Retrieve the collection
            MongoCollection
                collection = database
                                 .getCollection(collectionName);
  
            System.out.println(
                "Collection retrieved Successfully");
        }
        catch (Exception e) {
            System.out.println(
                "Collection retrieval failed");
            System.out.println(e);
        }
    }
}

输出

将值插入 MongoDb

只有一个文档类型的数据可以插入一个MongoDB。因此,我们可以使用append() 方法创建包含要插入的值的文档,也可以使用.insert()方法将文档直接传递到 MongoDB。

在这里,首先,我们创建了一个新文档作为“标题”,然后附加“关于”部分。然后,我们为文档赋予了相应的值。函数“.insertOne()”用于将文档插入到集合中。

下面是这种方法的实现:

// Java program to insert values into MongoDB
  
import com.mongodb.client.MongoDatabase;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
  
public class Collection {
  
    // Function to insert only one
    // document in to the MongoDB
    public static void insertADocIntoDb()
    {
        try {
            // establishConnections() Code
            // is defined above
            establishConnections();
  
            // Creating the document
            // to be inserted
            Document document
                = new Document("title",
                               "MongoDB")
                      .append("about",
                              "Open-Source database")
  
                  // Insert the document
                  collection.insertOne(document);
  
            System.out.println(
                "Document inserted Successfully");
        }
        catch (Exception e) {
            System.out.println(
                "Document insertion failed");
            System.out.println(e);
        }
    }
  
    // Function to insert multiple
    // documents in to the MongoDB
    public static void insertManyDocsIntoDb()
    {
        try {
            // establishConnections() Code
            // is defined above
            establishConnections();
  
            // Creating the document
            // to be inserted
            Document document
                = new Document("title", "MongoDB")
                      .append("about", "Open-Source database");
            Document document1
                = new Document("title", "retrieveDb")
                      .append("about", "Open-source database");
  
            // Adding the documents into a list
            List dblist
                = new ArrayList();
            dblist.add(document);
            dblist.add(document1);
  
            // Insert the list of documents into DB
            collection.insertMany(dblist);
  
            System.out.println(
                "Documents inserted Successfully");
        }
        catch (Exception e) {
            System.out.println(
                "Documents insertion failed");
            System.out.println(e);
        }
    }
}

输出:

显示所有文档的列表

为了显示集合的所有文档,使用find()方法。

这里,数据库有两个文档,分别是“document”和“document1”,它们是使用 find() 方法检索的。我们使用迭代器,因为它将遍历列表中存在的每个文档并将其显示给我们。

以下是显示所有文档的代码:

// Java code to display documents from DB
  
import com.mongodb.client.MongoDatabase;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
  
public class Collection {
  
    public static void displayDocuments()
    {
  
        try {
            // establishConnections() Code
            // is defined above
            establishConnections();
  
            System.out.println(
                "Displaying the list"
                + " of Documents");
  
            // Get the list of documents from the DB
            FindIterable iterobj
                = collection.find();
  
            // Print the documents using iterators
            Iterator itr = iterobj.iterator();
            while (itr.hasNext()) {
                System.out.println(itr.next());
            }
        }
        catch (Exception e) {
            System.out.println(
                "Could not find the documents "
                + "or No document exists");
            System.out.println(e);
        }
    }
}

输出:

更新 MongoDb 中的文档

为了更新文档,使用了updateOne()方法。
在这里,“Filters.eq”创建了一个过滤器,它匹配所有具有作为参数提供的名称的文档。 “Updates.set()”用于将文档更新为参数中的给定值。

以下是它的代码:

// Java code to update the documents in DB
  
import com.mongodb.client.MongoDatabase;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
  
public class Collection {
  
    public static void updateDocuments()
    {
  
        try {
            // establishConnections() Code
            // is defined above
            establishConnections();
  
            MongoDatabase database
                = mongo.getDatabase("mongoDb");
  
            MongoCollection collection
                = database.getCollection(
                    "GFGCollection");
  
            collection.updateOne(
                Filters.eq("title", "MongoDB"),
                Updates.set("about", "Database"));
  
            System.out.println(
                "Successfully updated"
                + " the document");
        }
        catch (Exception e) {
            System.out.println(
                "Updation failed");
            System.out.println(e);
        }
    }
}

输出:

删除文档

对于删除文档,使用deleteOne()方法。以下是删除文档的代码->

// Java code to update the documents in DB
  
import com.mongodb.client.MongoDatabase;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
  
public class Collection {
  
    public static void deleteDocuments()
    {
  
        try {
            // establishConnections() Code
            // is defined above
            establishConnections();
  
            MongoDatabase database
                = mongo.getDatabase("mongoDb");
  
            MongoCollection collection
                = database.getCollection(
                    "GFGCollection");
  
            collection.deleteOne(
                Filters.eq("title",
                           "Open-Source Database"));
            System.out.println(
                "Successfully deleted"
                + " the document");
        }
        catch (Exception e) {
            System.out.println(
                "Deletion failed");
            System.out.println(e);
        }
    }
}

输出:

删除集合

“Collection.drop()”用于删除创建的集合。以下是删除集合的代码:

// Java code to drop a collection in MongoDb
  
import com.mongodb.client.MongoDatabase;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
  
public class Collection {
  
    public static void dropACollection()
    {
  
        try {
            // establishConnections() Code
            // is defined above
            establishConnections();
  
            // Get the collection
            MongoCollection
                collection = database
                                 .getCollection(
                                     "GFGCollection");
  
            // Drop the above collection
            collection.drop();
  
            System.out.println(
                "Successfully dropped"
                + " collection");
        }
        catch (Exception e) {
            System.out.println(
                "Drop failed");
            System.out.println(e);
        }
    }
}

输出:

显示所有集合

为了显示所有集合的列表,使用listCollectionNames()方法。
在这里,我们遍历我们在“for()”语句的帮助下创建的所有集合。 Database.listCollectionNames() 用于显示数据库中存在的所有集合的列表。
以下是显示所有集合的代码:

// Java code to display all collections
  
import com.mongodb.client.MongoDatabase;
import com.mongodb.MongoClient;
import com.mongodb.MongoCredential;
  
public class Collection {
  
    public static void displayCollections()
    {
  
        try {
            // establishConnections() Code
            // is defined above
            establishConnections();
  
            MongoDatabase database
                = mongo.getDatabase("mongoDb");
  
            System.out.println(
                "Displaying the list"
                + " of all collections");
  
            MongoCollection collection
                = database.getCollection(
                    "GFGCollection");
  
            for (String allColl : database
                                      .listCollectionNames()) {
                System.out.println(allColl);
            }
        }
        catch (Exception e) {
            System.out.println(
                "Collections display failed");
            System.out.println(e);
        }
    }
}

输出: