Jaycee's Blog

Keep on hacking.

Mongoose 同时建立多个数据库连接

| Comments

此篇用于备忘, 最近要拆分数据库, 但是保留用户部分共享, 因此会用到一个项目的代码连接多个数据库的情况, 以前用的是

   mongoose.connect()

用这个建立的数据库连接, 只能连接一个数据库, 要想同时连接多个, 需要用下面这个:

   mongoose.createConnection()

就现在项目的逻辑来说, demo大致如下:

   //首先创建两个数据库连接
   var mongoose = require('mongoose');
   var config = require('config');
   var conn1 = mongoose.createConnection(config.db1);
   var conn2 = mongoose.createConnection(config.db2);

创建模型测试:

  //创建两个用户模型
  var Schema = mongoose.schema;        
  var UserSchema1 = new Schema({
      nickname: String,
      age: Number,
      email: String,
  });

  var UserSchema2 = new Schema({
      nickname: String,
      age: Number,
      email: String,
  });

  //再来, 我们创建两个不同连接的module,
  var User1 = conn1.model('User', UserSchema1);
  var User2 = conn2.model('User', UserSchema2);

  //接下来, 写两个测试函数看看结果: 
  function save1() {
      new User1({
          nickname: 'one',
          age: 8,
          email: 'qiaoker@hello.com',
      }).save(function (err, user) {
          if (err) {
              console.error(err.toString());
          } else {
              console.log('===== user1 ========');
              console.log(user);
          }
      });
  }
  function save2() {
      new User2({
          nickname: 'two',
          age: 3,

      }).save(function (err, user) {
          if (err) {
              console.error(err.toString());
          } else {
              console.log('===== user2 ========');
              console.log(user);
          }
      });
  }

经测试, 两个函数分别生成了各自的数据库和集合, 实现了业务需要, 即使用指定数据库中的模型, 唯一要注意的是在使用不同的数据库的模型时, 要知道自己在用哪个连接, 连接对象的名字要起得清晰.

最后补充一个最近总要用到的array类型字段的筛选方法: elemMatch方法, 这个方法mongoose官方文档写的很省略.. 基本上没明白是干嘛用的, 无奈我去看了mongodb的对应方法, 才知道原来是筛选符合条件的array字段的doc用的, 大概的用法如下

   Model.where('friends').elemMatch({sb: '2b'}).execFind(callback);
   // 上面的查询语句可以筛选出friends这个数组字段中拥有{2b: '2b'}这个元素的所有的doc. 

Comments