节省猫鼬

时间:2018-08-03 14:14:04

标签: node.js mongodb mongoose

model.save()使我非常困惑。

示例。我将mongoose.model(mongoose.schema)移到了单独的model.js文件中。当我使用这种方法创建模型时,以下内容会困扰我。

保存方法如何找到我与db建立的连接。 如果我有2个mondogDB连接实例,则以秒为单位,它选择哪个实例?

这是架构

const Schema = require("mongoose").Schema;
const mongoose = require("mongoose");

   const User = new Schema({
   name: String, 
   password: String, 

   date_created: {
      type: Date,
      default: Date.now
   },

   authorized: {
      type: Boolean,
      default: false
   } 
});

module.exports = mongoose.model("User", User);

1 个答案:

答案 0 :(得分:1)

因此,mongoose.model()的输出是一个模型,并且给定的模型始终绑定到一个连接。

默认情况下,大多数人仅使用mongoose.connect()中提供的连接和连接池。调用完后,缓存的猫鼬模块将在内部使用单例连接对象。因此,例如,如果我正在调用您的模型,则可以这样做:

const mongoose = require('mongoose');
const User = require('./models/user');

mongoose.connect(); // or pass in a custom URL

// from here, User will default to the mongoose-internal connection created in the previous line

如果要使用多个连接,则不能使用猫鼬内部单例,因此必须对创建的连接进行操作。例如:

// ./schemas/user.js
// You now export the Schema rather than the module in your file
//module.exports = mongoose.model('User', User);
module.exports = User;

然后在调用代码中输入

const config = require('./config'); // presumably this has a couple mongo URLs
const mongoose = require('mongoose');
const UserSchema = require('./schemas/user');

const conn1 = mongoose.createConnection(config.url1);
const conn2 = mongoose.createConnection(config.url2);

const User1 = conn1.model('User', UserSchema);
const User2 = conn2.model('User', UserSchema);

// now any users created with User1 will save to the first db, users created with User2 will save to the second.