我正在尝试构建一个用于搜索作业的 API
前端输入:单字段
keyword
带字符串
API响应:返回与以下任意字段匹配的职位列表
架构
1.工作架构
title: {
type: String,
required: true,
},
location: {
type: mongoose.Schema.Types.ObjectId,
ref: 'location',
},
skills:[{
type: mongoose.Schema.Types.ObjectId,
ref: 'Skill'
}],
company: {
type: mongoose.Schema.Types.ObjectId,
ref: 'company',
},
如您所见,技能、位置和公司映射在另一个集合中,并且前端没有对关键字进行分隔,我不确定以哪种方式可以编写有效的搜索查询
现在的方法是
location
和公司也遵循同样的做法
但我不确定这是正确的方法,有人可以建议正确的方法吗
根据集合、索引等的大小,可以在您的案例中应用许多策略(您的、AdamExchange 的策略、与 $lookup 阶段的聚合...)。
但我认为你真的必须寻找索引和索引交集策略来真正优化你的查询
我愿意 :
skillId = db.skill.find({name:MyKeyword });
locationId = db.location.find({name:MyKeyword });
companyId = db.company.find({name:MyKeyword });
db.job.find({
$or: [
{
skill: {
$eq: skillId
}
},
{
location: {
$eq: locationId
}
},
{
company: {
$eq: companyId
}
}
]
})