Как искать в Mon goose заполнить массив [массив, содержащий ref] - PullRequest
2 голосов
/ 14 июля 2020

Я новичок в разработке стека MEAN. Подскажите, пожалуйста, как искать в массиве Mon goose populate. этот массив, содержащий ссылку

Схема обсуждения:

const discussionSchema = new Schema({
  user_id: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'User',
    required: true
  },
  subject_title: {
    type: String,
    required: true
  },
keywords: [
    {
      type: Schema.ObjectId,
      ref: 'Keyword',
      default: null
    }
}, 
{
  timestamps: true
}
)

Схема ключевых слов:

const keywordSchema = new Schema({
  keyword:{ 
    type: String,
    required: true,
    unique: true, 
  }
  
}, {
  timestamps: true
})

Как искать строку ключевого слова в массиве ключевых слов, содержащем ref ID модели ключевого слова.

Ответы [ 2 ]

0 голосов
/ 14 июля 2020

Альтернативные способы использования мон goose население

await DiscussionModel.find('...')
        .populate({ path: 'user_id', select: '...' })
        .populate({ 
           path: 'keywords', 
           match: { 'keyword': /regExp/ or 'exact match'} 
        }).lean().exec();
0 голосов
/ 14 июля 2020

Для этого можно использовать агрегирование mon goose и оператор $lookup. $lookup используется для присоединения к таким коллекциям, как populate.

Вы должны сначала присоединиться к обсуждению и ключевым словам, а затем выполнить поиск по ключевому слову с помощью оператора $match.

Предположим, что matchingKeyword переменная - это ваш запрос.

let result = await DiscussionModel.aggregate([{
  $lookup: {
    from: 'keywords',
    localField: 'keywords',
    foreignField: '_id',
    as: 'keywords'
  }
}, {
  $match: {
    'keywords.keyword': matchingKeyword
  }
}]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...