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

Posted

技术标签:

【中文标题】如何在 Mongoose 中搜索填充数组 [包含 ref 的数组]【英文标题】:How to search in Mongoose populate array [array containing ref] 【发布时间】:2020-11-03 12:20:34 【问题描述】:

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

讨论模式:

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的关键字数组中搜索关键字字符串。

【问题讨论】:

【参考方案1】:

使用猫鼬种群的替代方法

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

【讨论】:

【参考方案2】:

您可以使用猫鼬聚合和$lookup 运算符来实现这一点。 $lookup 用于加入 populate 等集合。

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

假设matchingKeyword 变量是您的查询。

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

【讨论】:

以上是关于如何在 Mongoose 中搜索填充数组 [包含 ref 的数组]的主要内容,如果未能解决你的问题,请参考以下文章

Mongoose 切片数组,在填充字段中

Mongoose 填充包含 ref 的对象数组

Mongoose 填充包含 ref 的对象数组

Mongoose - 填充删除的空引用?

在 mongoose 中填充嵌套数组 - Node.js

NodeJS - 我们可以从 Mongoose 更新填充的子文档吗?