两个服务器可以访问一个公共的mongoDB数据库吗?

Can two servers access a common mongoDB database

本文关键字:mongoDB 数据库 访问 两个 服务器 一个      更新时间:2023-09-26

>我在端口 3000 和 4000 上创建了 2 个网络服务器。其中一个网络服务器创建了一个数据库,并有3个集合。

显示数据库 本地 0.000GB sensor_db 0.000GB 使用sensor_db 切换到数据库sensor_db 显示收藏 传感器 模板组 模板

第二台服务器可以访问创建的数据库吗? 如果是,我无法访问集合。它有什么语法吗?

第一台服务器:

var express = require('express');
var app= express();
var path = require('path');
var bodyParser= require('body-parser');
var mongoose = require('mongoose');
mongoose.connect('mongodb://localhost/sensor_db');
var Schema = mongoose.Schema;
var sensorSchema = new Schema({
  value:{ type:Number, default:0},
  format:{type:String, default:"default"},
  id:{type:Number,required:true,unique:true},
  description:{type:String},
  type:{type:String},
  groupId:{type:Number},
  users:{type:Array,default:[]},
  admin:{type:String,default:'Undefined'},
  status:{type:String,default:'Undefined'},
  owner:{type:String,default:'Undefined'},
  templateId:{type:Number}
});
var Sensor = mongoose.model('Sensor',sensorSchema);
app.get('/sensorlist',function(req,res) {
  console.log("I recieved a GET /sensorlist request");
  Sensor.find(function(err,data){
    if (err) return console.error(err);
    console.log(data);
    res.json(data)
  });
});
app.post('/check/health',function(req,res){
  socket.emit('data', 'I need your health status', function ack(data) {
    console.log('data emit was acknowledged by Monitoring Server:', data);
    return res.json(data);
  });
});

第二台服务器:

var app = require('express')();
var server = require('http').Server(app);
var io = require('socket.io')(server);
var express = require('express');
io.on('connection', function(socket){
  console.log('connection received from Provisioning');
  // To get messages from Provisioning server
  socket.on('data', function(data, ack) {
    console.log('Message from provision is : ' + ': ' + data);
    ack('here is your data - 1111');
    console.log("Trying to access the Sensor_DB Database");
    Sensor.find(function(err,data){
      if(err) return console.error(err);
      console.log(data);
      //res.json(data);
    });
  });
});
server.listen(4000, function(){
  console.log('socket.io server listening on *:4000');
});

我收到错误 - 未定义传感器

非常感谢杰西

一旦它连接到数据库,我试图支付集合,但收到此错误消息:无法读取 null 的属性"hasListCollectionsCommand"

var mongoose = require('mongoose');
mongoose.connect('mongodb://127.0.0.1:27017/sensor_db') ;
    console.log("successfully connected to the database");
//mongoose.connection.db
mongoose.connection.db.listCollections().toArray(function(err, names) {
  if (err) {
    console.log(err);
  }
  else {
    names.forEach(function(e,i,a) {
      mongoose.connection.db.dropCollection(e.name);
      console.log("--->>", e.name);
    });
  }
});

两个不同的服务器不能共享传感器对象的同一实例。

  var mongoose = require('mongoose');
  mongoose.connect('mongodb://localhost/sensor_db');
  var Schema = mongoose.Schema;
var sensorSchema = new Schema({
  value:{ type:Number, default:0},
  format:{type:String, default:"default"},
  id:{type:Number,required:true,unique:true},
  description:{type:String},
  type:{type:String},
  groupId:{type:Number},
  users:{type:Array,default:[]},
  admin:{type:String,default:'Undefined'},
  status:{type:String,default:'Undefined'},
  owner:{type:String,default:'Undefined'},
  templateId:{type:Number}
  });
var Sensor = mongoose.model('Sensor',sensorSchema);

此代码声明一台服务器的架构,而不是第二台服务器的架构。 因此,您还必须在第二台服务器中声明实例。

与 mongo 数据库无关的问题是传感器实例在第二个服务器中没有任何声明。