我有一个关于如何聚合多个 $match 的问题?
例如我有一条路线 ->
api/job/filter/$id_job_position/$job_status/$id_city
$id_job_position is ObjectId
$job_status is Full Time, Part Time or Freelance
$id_city is ObjectId
我的聚合代码:
db.job.aggregate([
{ $match: {
job_position: ObjectId(id_job_position),
city: ObjectId(id_city),
job_status: job_status,
show: true,
}},
])
但是当用户只填写 $id_job_position 然后它的返回错误是因为 $job_status 没有数据,并且错误“传入的参数必须是一个 12 个字节的字符串或一个 24 个十六进制字符的字符串”,因为它的 ObjectId。< /p>
我希望它灵活,例如如果用户只填写 $job_status,那么我的聚合只运行 job_status 选择数据。
然后代码会变成这样:
db.job.aggregate([{ $match: { job_status: job_status, show: true }} ])
我不知道怎么做。先谢谢了。
答案 0 :(得分:1)
只需创建一个查询对象并根据您的要求填写所需的属性
const userInput = {};
const query = {};
if (userInput.job_position) query.job_position = userInput.job_position
if (userInput.job_status) query.job_status = userInput.job_status
db.job.aggregate([{ $match: query}])