如何在 Mongoose 中搜索填充数组 [包含 ref 的数组]

How to search in Mongoose populate array [array containing ref]

我是 MEAN 堆栈开发的新手。请任何人告诉如何在 Mongoose 填充数组中搜索。该数组包含 ref.

讨论架构:

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
})

如何在包含关键字模型的引用 ID 的关键字数组中搜索关键字字符串。

您可以使用 mongoose 聚合和 $lookup 运算符来实现此目的。 $lookup 用于加入 populate.

等集合

您必须先加入讨论和关键字,然后使用 $match 运算符搜索关键字。

假设 matchingKeyword 变量是您的查询。

let result = await DiscussionModel.aggregate([{
  $lookup: {
    from: 'keywords',
    localField: 'keywords',
    foreignField: '_id',
    as: 'keywords'
  }
}, {
  $match: {
    'keywords.keyword': matchingKeyword
  }
}]);

使用猫鼬种群的替代方法

await DiscussionModel.find('...')
        .populate({ path: 'user_id', select: '...' })
        .populate({ 
           path: 'keywords', 
           match: { 'keyword': /regExp/ or 'exact match'} 
        }).lean().exec();