大家好,我有一个问题,我需要解决我的大学项目。我的一位老师说我需要一个复制数据库,但是当我提出一个简单的请求时
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() 与两个数据库一起使用。 谢谢!
发生该错误的原因是您尝试连接到 MongoDB 副本集,但尚未将其配置为副本集。 MongoDB 将连接字符串中的多个主机视为一个副本集,要求副本集正确初始化和配置。
配置副本集:
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" }
]
})
更新连接字符串: 将
replicaSet=rs0
添加到连接 URI:
mongoose.connect('mongodb://root:[email protected]:21017,127.0.0.1:21018/test?replicaSet=rs0', {
authSource: "admin",
});