在复制 MongoDB 上执行 Model.find()

问题描述 投票:0回答:1

大家好,我有一个问题,我需要解决我的大学项目。我的一位老师说我需要一个复制数据库,但是当我提出一个简单的请求时

Model.find()
返回一条错误消息:
Operation `users.find()` buffering timed out after 10000ms

docker-compose.yml:

version: '3.1'
services:

  DB1:
    image: mongo:latest
    restart: always
    ports:
      - "21017:27017"
    env_file:
      - .env
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USR}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PWD}
      MONGO_INITDB_DATABASE: test
    volumes:
      - dbdata6:/data/db

  DB2:
    image: mongo:latest
    restart: always
    ports:
      - "21018:27018"
    env_file:
      - .env
    environment:
      MONGO_INITDB_ROOT_USERNAME: ${MONGO_ROOT_USR}
      MONGO_INITDB_ROOT_PASSWORD: ${MONGO_ROOT_PWD}
      MONGO_INITDB_DATABASE: test
    volumes:
      - dbdata7:/data/db

NodeJS 代码:

const mongoose = require('mongoose');

async function Run() {


    var s = await mongoose.connect('mongodb://root:[email protected]:21017,127.0.0.1:21018/test',

        {
            authSource: "admin",
        }
    ).then(
        () => {
            console.log("Connected to MongoDB");
        },
        err => {
            console.error(err);
        }
    );

    console.log("Connected to MongoDB");
}

app.get(`/collectLastId`, async (req, res) => {
    var s = await require('../models/User.model.js').makeModel();

    var data = (await s.find({}));

    res.writeHead(200, { 'Content-Type': 'application/json' });
    res.end(s.toString());
});

我想知道如何将 Model.find() 与两个数据库一起使用。 谢谢!

node.js mongodb replication replicate
1个回答
0
投票

发生该错误的原因是您尝试连接到 MongoDB 副本集,但尚未将其配置为副本集。 MongoDB 将连接字符串中的多个主机视为一个副本集,要求副本集正确初始化和配置。

  1. 配置副本集:

    • replicaSet
      中添加
      docker-compose.yml
      选项:
      command: ["--replSet", "rs0"]
      
    • 启动容器后初始化副本集:
      docker exec -it <DB1_container_name> mongo
      rs.initiate({
          _id: "rs0",
          members: [
              { _id: 0, host: "DB1:27017" },
              { _id: 1, host: "DB2:27018" }
          ]
      })
      
  2. 更新连接字符串: 将

    replicaSet=rs0
    添加到连接 URI:

    mongoose.connect('mongodb://root:[email protected]:21017,127.0.0.1:21018/test?replicaSet=rs0', {
        authSource: "admin",
    });
    
© www.soinside.com 2019 - 2024. All rights reserved.