現在、私はそれらを使う場所によって異なるファイルで異なるモデルを定義していますが、それらの間には関係があると思います。最初。例:モンゴース人口を使ってモデルを結合する方法
ファイル 'モデル/ users.js'
var mongoose = require('mongoose');
var db = mongoose.connection;
var UserSchema = mongoose.Schema({
// fields
companyId: {
type: String
}
});
var User = module.exports = mongoose.model('User', UserSchema);
module.exports.getUserById = function(id, callback){
User.findById(id, callback);
}
ファイル 'モデル/ company.js'
var mongoose = require('mongoose');
var db = mongoose.connection;
var CompanySchema = mongoose.Schema({
// fields
});
// module export and functions etc.
だから例では、ユーザー企業IDのいずれかのIDがあります企業。その後、私のルートで、私は、両方のモデルをインポートするユーザーを取得し、同社のIDを検索し、その会社のデータをフェッチします:私はここにマングースのドキュメントに人口について読んでてきた
var Promise = require('bluebird');
var User = Promise.promisifyAll(require('../models/user'));
var Company = Promise.promisifyAll(require('../models/company'));
User.getUserByIdAsync()
.then(function(user){
return [user, Company.getCompanyByIdAsync(user.companyId)];
}).spread(function(user,company){
// Do stuff
}).catch(function(err)... etc });
:http://mongoosejs.com/docs/populate.htmlが、中例はすべて1つのファイルにあります。私は他のモデルへの呼び出しがエラーをスローするように保守性(と私の正気)のためにモデルを別々に保つことを試みています。
私はこれを行うことができるように、モデルに参加するか、他の外部モデルを参照する方法はありますか?スキーマは正しいですか?...
私はエクスプレスとモンゴースを使用しています。修正は非常に簡単です、
var getUserWithPopulate = function (criteria, projection, options, callback) {
Models.Users.find(criteria, projection, options).populate([
{path: 'company', select:'companyId, companyName'}
]).exec(callback);
};
おかげ参考