簡體   English   中英

MongoDB 刪除所有數據庫,除了 admin config 和 local

[英]MongoDB deletes all databases, besides admin config and local

我有一個問題。 我想將 MongoDB 與我的 Java Stuff 一起使用,但我不知道為什么它會不斷刪除除 admin、config 和 local 之外的所有其他數據庫。 我目前在我的本地服務器上使用它。 我已經檢查了我的代碼,但那里沒有刪除。

我正在制作一個 minecraft 插件,它連接到數據庫並創建 2 個 collections。

好的,我找到了問題所在。 數據庫已創建,但由於其為空而立即被刪除。 但我想知道為什么,因為如您所見,我正在其中創建兩個 collections。

我不知道這是否重要,但我使用異步 mongodb java 驅動程序。

    private final String hostName;
private final String port;

private MongoClient client;
private MongoDatabase database;

private MongoCollection<Document> playerCollection, statsCollection;

public MongoManager(String hostName, String port) {
    this.hostName = hostName;
    this.port = port;
}

public void connect() {
    this.client = MongoClients.create(new ConnectionString(MessageFormat.format("mongodb://{0}:{1}", hostName, port)));

    this.database = this.client.getDatabase("prod");
    this.playerCollection = this.database.getCollection("players");
    this.statsCollection = this.database.getCollection("stats");
}

getCollection方法上指定的集合名稱可能存在也可能不存在於 mongodb 上。 如果該集合不存在,MongoDB 將創建它作為寫入操作的一部分。

在 MongoDB 中,當您創建集合或將一些數據插入到集合中時,會創建一個數據庫。 這是一些代碼來證明這一點。

(1) getDatabase方法不創建數據庫,而是“訪問”名為testDB1的數據庫,不管它是否存在。 如果數據庫不存在,則不會創建它。 如果存在,您可以訪問其中的任何現有 collections。 假設沒有名為“testDB1”的數據庫,以下代碼將創建一個數據庫和一個集合。

try(MongoClient mongoClient = MongoClients.create("mongodb://localhost:27017/")) {

    MongoDatabase database = mongoClient.getDatabase("testDB1");
    database.createCollection("testColl");
}

(2) 通過將文檔插入該數據庫中的集合來創建一個新數據庫。

MongoDatabase database = mongoClient.getDatabase("testDB2");
MongoCollection<Document> coll = database.getCollection("testColl");

Document newDoc = Document.parse("{ 'name': 'Mongo' }");
coll.insertOne(newDoc);
System.out.println(coll.find().first().toJson());

筆記:

As of MongoDB Java Driver version 3.9, MongoDB Async Java Driver Documentation says that the callback-based Async Java Driver has been deprecated in favor of the MongoDB Reactive Streams Java Driver.

好的人。 我真的很感謝所有試圖回答我問題的人。 在我閱讀了@prasad_ 的答案后,我的大腦終於又開始工作了。

我記得mongo-db同步和異步API之間有一個巨大的區別。

當您在同步 API 中執行 getDatabase() 時,如果它返回 null,它將自動為您創建它。

同步 API:

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongo-java-driver</artifactId>
        <version>LATEST</version>
        <scope>compile</scope>
    </dependency>

異步 API:

    <dependency>
        <groupId>org.mongodb</groupId>
        <artifactId>mongodb-driver-async</artifactId>
        <version>LATEST</version>
        <scope>compile</scope>
    </dependency>

暫無
暫無

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

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