使用外部文件中的模型填充 Mongoose 模式属性
Populating Mongoose schema properties with models in external files
我正在尝试 populate 一个 Mongoose 模式中的 属性,它在另一个外部 model/schema.
中引用 属性
当两个 models/schemas 和查询都在同一个文件中时,我可以让 Mongoose population/referencing 工作,但是我有我的体系结构设置,所以模型都在它们自己的文件中/models 目录和 /models/index.js 将 return 模型对象(显然 index.js知道排除自己)
我 运行 遇到的问题是,由于 Schemas/Models 都在它们自己的文件中,当我指定型号名称作为参考时,它不起作用。我尝试将该特定模型本身加载到另一个模型中,但也失败了。
仅供参考:我对 MongoDB 和 Mongoose 比较陌生,所以下面的代码非常非常粗糙,主要是我在学习的过程中
群模型
// models/group.js
'use strict'
module.exports = Mongoose => {
const Schema = Mongoose.Schema
const modelSchema = new Schema({
name: {
type: String,
required: true,
unique: true
}
})
return Mongoose.model( ModelUtils.getModelName(), modelSchema )
}
账户模型
// models/account.js
'use strict'
module.exports = Mongoose => {
// I tried loading the specific model being referenced, but that doesn't work
const Group = require('./group')( Mongoose )
const Schema = Mongoose.Schema
const modelSchema = new Schema({
username: {
type: String,
required: true,
unique: true
},
_groups: [{
type: Schema.Types.ObjectId,
ref: 'Group'
}]
})
// Trying to create a static method that will just return a
// queried username, with its associated groups
modelSchema.statics.findByUsername = function( username, cb ) {
return this
.findOne({ username : new RegExp( username, 'i' ) })
.populate('_groups').exec(cb)
}
return Mongoose.model( ModelUtils.getModelName(), modelSchema )
}
正如您在帐户模型中看到的那样,我试图将组模型引用为 _groups 元素,然后在填充关联组时查询帐户 modelSchema.statics.findByUsername静态方法..
主应用程序文件
// app.js
const models = require('./models')( Mongoose )
models.Account.findByUsername('jdoe', ( err, result ) => {
console.log('result',result)
Mongoose.connection.close()
})
我不清楚 ModelUtils.getModelName()
是如何实现的。我认为问题应该出在这里,因为我按如下所示更改您的代码后它运行良好
// group.js
return Mongoose.model( 'Group', modelSchema );
// account.js
return Mongoose.model( 'Account', modelSchema );
// app.js
const models = require('./models/account.js')( Mongoose );
models.findByUsername('jdoe', ( err, result ) => {
我正在尝试 populate 一个 Mongoose 模式中的 属性,它在另一个外部 model/schema.
中引用 属性当两个 models/schemas 和查询都在同一个文件中时,我可以让 Mongoose population/referencing 工作,但是我有我的体系结构设置,所以模型都在它们自己的文件中/models 目录和 /models/index.js 将 return 模型对象(显然 index.js知道排除自己)
我 运行 遇到的问题是,由于 Schemas/Models 都在它们自己的文件中,当我指定型号名称作为参考时,它不起作用。我尝试将该特定模型本身加载到另一个模型中,但也失败了。
仅供参考:我对 MongoDB 和 Mongoose 比较陌生,所以下面的代码非常非常粗糙,主要是我在学习的过程中
群模型
// models/group.js
'use strict'
module.exports = Mongoose => {
const Schema = Mongoose.Schema
const modelSchema = new Schema({
name: {
type: String,
required: true,
unique: true
}
})
return Mongoose.model( ModelUtils.getModelName(), modelSchema )
}
账户模型
// models/account.js
'use strict'
module.exports = Mongoose => {
// I tried loading the specific model being referenced, but that doesn't work
const Group = require('./group')( Mongoose )
const Schema = Mongoose.Schema
const modelSchema = new Schema({
username: {
type: String,
required: true,
unique: true
},
_groups: [{
type: Schema.Types.ObjectId,
ref: 'Group'
}]
})
// Trying to create a static method that will just return a
// queried username, with its associated groups
modelSchema.statics.findByUsername = function( username, cb ) {
return this
.findOne({ username : new RegExp( username, 'i' ) })
.populate('_groups').exec(cb)
}
return Mongoose.model( ModelUtils.getModelName(), modelSchema )
}
正如您在帐户模型中看到的那样,我试图将组模型引用为 _groups 元素,然后在填充关联组时查询帐户 modelSchema.statics.findByUsername静态方法..
主应用程序文件
// app.js
const models = require('./models')( Mongoose )
models.Account.findByUsername('jdoe', ( err, result ) => {
console.log('result',result)
Mongoose.connection.close()
})
我不清楚 ModelUtils.getModelName()
是如何实现的。我认为问题应该出在这里,因为我按如下所示更改您的代码后它运行良好
// group.js
return Mongoose.model( 'Group', modelSchema );
// account.js
return Mongoose.model( 'Account', modelSchema );
// app.js
const models = require('./models/account.js')( Mongoose );
models.findByUsername('jdoe', ( err, result ) => {