У меня есть модель Note
и модель User
, построенные по моей схеме mon goose. Схема Note
содержит поле consumer
, которое представляет собой массив идентификаторов User
. Эквивалентное поле присутствует в схеме user
, но оно должно быть доступно только во время выборки и, следовательно, фактически заполнено его внешним полем, как показано ниже.
Однако, когда присутствует Query Middleware
, поле consumedPosts
из извлеченных данных является просто пустым массивом, даже когда consumer
имеет массив идентификаторов, а когда он отсутствует (закомментирован), * Поле 1012 * вообще недоступно (в извлеченных данных).
Как мне сказать моей виртуальной схеме, что 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 Атлас
{
"_id":{"$oid":"5e9ef4939827691d7cb7e73b"},
"consumer":[{"$oid":"5e451b091e6d286b04f19a4f"}],
"__v":{"$numberInt":"0"}
}
Мой пользовательский документ от Почтальона
{
"firstName":"Aakash",
"lastName":"Meshram",
"consumedPosts":[],
}