Как виртуально заполнить поля многие-ко-многим в mon goose? - PullRequest
0 голосов
/ 22 апреля 2020

У меня есть модель 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":[],
}

...