我有一个通过我的猫鼬模式构建的Note
模型和一个User
模型。 Note
模式包含字段consumer
,它是User
id的数组。 user
模式中存在一个等效字段,但是仅在获取时才可用,因此实际上用其外来字段填充,如下所示。
但是,当存在Query Middleware
时,即使consumedPosts
具有ID数组且不存在ID时,从获取的数据中获取的consumer
字段也只是一个空数组(已注释掉) )consumedPosts
字段根本不可用(在获取的数据中)。
如何告诉我的虚拟模式consumer
是一个数组?
// Notes Schema & Model
const noteSchema = new mongoose.Schema(
{
consumer: [
{
type: mongoose.Schema.ObjectId,
ref: 'User',
},
],
}
)
const Note = mongoose.model('Note', noteSchema)
// User Schema & Model
const userSchema = new mongoose.Schema(
{
firstName: String,
lastName: String,
},
{
toJSON: { virtuals: true },
toObject: { virtuals: true },
}
)
// Virtual Populate
userSchema.virtual('consumedPosts', {
ref: 'Note',
foreignField: 'consumer',
localField: '_id',
})
// Query Middleware
userSchema.pre(/^find/, function(next) {
const options = '-__v -collaborator -consumer -creator -body'
this.populate({
path: 'consumedPosts',
select: options,
})
next()
})
const User = mongoose.model('User', userSchema)
我的笔记文档来自MongoDB Atlas
{
"_id":{"$oid":"5e9ef4939827691d7cb7e73b"},
"consumer":[{"$oid":"5e451b091e6d286b04f19a4f"}],
"__v":{"$numberInt":"0"}
}
我的邮递员用户文档
{
"firstName":"Aakash",
"lastName":"Meshram",
"consumedPosts":[],
}