【问题标题】:Mongoose populate across 2 databasesMongoose 填充 2 个数据库
【发布时间】:2016-06-04 22:28:12
【问题描述】:

我有一个使用 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_dbnames_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
        }
    })

有没有一种特殊的方法可以将 db1 中的数据填充到 db2 中的数据?谢谢。

【问题讨论】:

  • @marc_s 感谢修改

标签: node.js mongodb mongoose mongoose-populate


【解决方案1】:

Populate Mongo documents across databases 功能自 mongoose v3.9.0 起添加。根据这个across db populate test,当model 被调用时,您应该使用不同的数据库名称。一些示例代码如下。更多细节请参考链接中的测试代码。

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)

【讨论】:

  • 我也是这么做的。但是填充仍然不起作用。
  • 执行此操作后我应该将哪些参数输入.populate().populate('name') 正在工作。
  • 我明白了。 .populate('name', '', Name) 第一个是参考键,我不明白第二个参数是什么所以我留下它' ' 然后第三个是参考模型
  • @TheGreenFoxx,参考这个doc,第二个参数是[select] <Object, String> Field selection for the population query
  • @CENT1PEDE 第二个参数定义要从引用模型中选择的字段。在我的情况下,它的“名字姓氏”没有逗号
猜你喜欢
  • 2023-01-15
  • 2020-07-11
  • 2020-06-07
  • 2016-08-26
  • 2019-01-31
  • 1970-01-01
  • 2023-04-09
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多