当前位置: 首页 > 知识库问答 >
问题:

如何在具有REPLICA_SET_SECONDARY类型的MongoDB服务器上执行写操作?

慕宏峻
2023-03-14
INFO: No server chosen by WritableServerSelector from cluster description ClusterDescription{type=REPLICA_SET, connectionMode=SINGLE, serverDescriptions=[ServerDescription{address=localhost:27017, type=REPLICA_SET_SECONDARY, state=CONNECTED, ok=true, version=ServerVersion{versionList=[3, 2, 11]}, minWireVersion=0, maxWireVersion=4, maxDocumentSize=16777216, roundTripTimeNanos=691940, setName='rs2', canonicalAddress=192.168.71.22:27017, hosts=[192.168.70.197:27017, 192.168.71.22:27017, PC:27017], passives=[], arbiters=[], primary='PC:27017', tagSet=TagSet{[]}, electionId=null, setVersion=3}]}. Waiting for 30000 ms before timing out
package ru.energodata;

import com.mongodb.*;
import java.io.File;
import java.io.IOException;
import java.util.Scanner;
import com.mongodb.gridfs.GridFS;
import com.mongodb.gridfs.GridFSInputFile;


public class Main {
public static void main(String[] args) {
Scanner scanner;
int selection;
boolean exit = false;
    MongoClient mongoClient = new MongoClient("localhost", 27017);
    DB db = mongoClient.getDB("imagedb");
    GridFS gfsPhoto = new GridFS(db, "photo");

    while (!exit)
    {
        System.out.println("Choose action with the DB");
        System.out.println("1 - add files to DB");
        System.out.println("2 - list files");
        System.out.println("3 - remove files");
        scanner = new Scanner(System.in);
        if(scanner.hasNextInt()) {
            selection = scanner.nextInt();

            if (selection == 1) {
                String path = "C:\\2015";
                String fileName;
                File dir = new File(path);
                File[] imageFile = dir.listFiles();
                try {
                    for (File anImageFile : imageFile) {
                        GridFSInputFile gfsFile = gfsPhoto.createFile(anImageFile);
                        fileName = anImageFile.getName();
                        System.out.println("Current file: " + fileName);
                        // set a new filename for identify purpose
                        gfsFile.setFilename(fileName);
                        // save the image file into mongoDB
                        gfsFile.save();
                    }
                } catch (MongoException | IOException e) {
                    e.printStackTrace();
                }
            }

            if (selection == 2) {
                // print the result
                System.out.println("Database content:");
                DBCursor cursor = gfsPhoto.getFileList();
                if (cursor.hasNext()) {
                    while (cursor.hasNext()) {
                        System.out.println(cursor.next());
                    }
                }

                    else {System.out.println("none.");
                }
            }
            if (selection == 3) {
                // remove the image file from mongoDB
                DBCursor cursor = gfsPhoto.getFileList();
                if (cursor.hasNext()) {
                while (cursor.hasNext()) {
                    gfsPhoto.remove(cursor.next());
                }
                System.out.println("DB content deleted");
                }
                else {System.out.println("DB is empty");
                }
            }
        }
    else {
            System.out.println("Select either 1, 2 or 3");
            scanner = new Scanner(System.in);
        }
    }
}
}

共有1个答案

印嘉泽
2023-03-14

自己发现的。换行:

MongoClient mongoClient = new MongoClient("localhost", 27017);

    MongoClientOptions options = MongoClientOptions.builder()
            .readPreference(ReadPreference.nearest())
            .writeConcern(WriteConcern.W2)
            .build();
    MongoClient mongoClient = new MongoClient(Arrays.asList(
            new ServerAddress(serverList[0]),
            new ServerAddress(serverList[1]),
            new ServerAddress(serverList[2])),options);

其中ServerList[]字符串数组包含副本集中所有服务器的地址。现在应用程序找到主服务器并连接到它。

INFO: Discovered replica set primary pc:27017
INFO: Opened connection [connectionId{localValue:5, serverValue:79}] to pc:27017
 类似资料:
  • 我有一个文件列表和一个分析这些文件的分析器列表。文件数量可以很大(200,000),分析器数量可以很大(1000)。所以操作总数可能非常大(200,000,000)。现在,我需要应用多线程来加快速度。我采用了这种方法: 但这种方法的问题是,它占用了太多的内存,我想有更好的方法可以做到这一点。我还是java和多线程的初学者。

  • 我已经安装了MySQL 5.5。34,Apache2.2。15和PHP5.5。4在我的linux Redhat系统(2.6.32-220.17.1.el6.x86_64)上按各自的顺序排列。 当php脚本在web浏览器上运行时,它被apache解释为html,尽管它在命令行中运行良好。 我在httpd.conf文件中做了以下更改:我有未注释的LoadMoulesphp5_module模块/libp

  • mongodb占用CPU和内存太大怎么解决? 我在阿里云ECS服务器(2核2G)上运行了一个本地的mongodb,但是它占用的CPU(70%多)和内存(现在也看不到了,可能是监控进程崩溃了还是怎么了)太多,现在vscode + remote ssh也连接不上去了,该怎么办? 有什么办法可以限制mongodb的CPU使用和内存使用吗? 如果我不使用本地的mongodb而使用云mongodb是不是就会

  • 我们有现有的Spring批处理应用程序,我们希望使其可扩展以在多个节点上运行。 例如,我希望在不同的工作服务器上运行作业。在这种情况下,我有一个作业a和一个作业B,在worker server的一个实例上运行作业a,在worker server的另一个实例中运行作业B。 在spring batch integration文档中,我找到了一个关于SETP远程分区的解释。然而,我不知道如何从主服务器启

  • 无法在下面的链接中执行右键单击操作。我们尝试了几乎所有的案例来实现自动化。https://the-internet.herokuapp.com/context_menu 我使用的是Selenium 3.3和geckodrivers的最新版本。 动作动作=新动作(驱动);行为moveToElement(元素)。点击();行为上下文单击(元素)。build()。执行();行为发送键(键。箭头向下)。发

  • 我一直在尝试使用mongodb shell,但服务器无法运行,我使用命令提示符导航到cd C:\ProgramFiles\mongodb\server\4.4\bin,然后,我在C:\Data\db上创建了目录,尝试启动mongod命令,但我得到了以下错误: null