mongoose遍布2个数据库
我有一个使用2个数据库的node app
。 其中一个是所有数据的其余部分的Names
。
我有这个连接设置:
// DATABASE CONNECTION var APP_DB_URI = config.APP_DB; // mongodb://localhost:27017/app_db var app_DB = mongoose.createConnection(APP_DB_URI); var name_DB = app_DB.useDb(config.NAME_DB); // 'name_db'
这个连接工作正常。
将数据保存到app_db
和names_db
完美工作也没有问题。
但问题是这样的:当我试图查询说, Account
模型,然后填充引用的Name
模型,填充过程返回null
。
帐户架构:
var mongoose = require('mongoose'); var Schema = mongoose.Schema; var field = { email: {type: String, unique: true}, password: {type: String, select: false}, name: {type: Schema.Types.ObjectId, ref: 'Name'}, } var options = { id: false, versionKey: false } var schema = new Schema(field, options); module.exports = mongoose.model('Account', schema);
名称模式:
'use strict'; var mongoose = require('mongoose'); var Schema = mongoose.Schema; var field = { firstName: {type: String, required: true}, middleName: {type: String, required: true}, lastName: {type: String, required: true}, suffix: {type: String, required: false,}, } var options = { id: false, versionKey: false } var schema = new Schema(field, options); module.exports = mongoose.model('Name', schema);
查询和人口:
var app_db = *app_db instance passed to this controller* var Account = app_db.model('Account'); Account.findOne({email:req.body.email}) .populate('name') .exec(function (err, user) { if(user){ // user.name returns null } })
有没有一种特殊的方式来从db2填充db2中的数据? 谢谢。
从mongoose v3.9.0
添加跨数据库填充Mongo文档的function。 通过db填充testing ,您应该在调用model
时使用不同的db名称。 一些示例代码如下。 更多详细信息请参考链接中的testing代码。
var app_DB = mongoose.createConnection(APP_DB_URI); var name_DB = app_DB.useDb(config.NAME_DB); // 'name_db' // ... module.exports = app_DB.model('Account', schema); // ... module.exports = name_DB.model('Name', schema);
填充
.populate('name', '', Name)