mongodb 前端条件动态查询的几种方式
使用场景
在实际的开发中,最常见的是前端有你多个要查询的条件,但是不一定每个条件都是必须的,很多情况下是只需要查询一条或者全部,那是如何应对这种条件是动态的情况呢。
案例
动态构建 MongoDB 聚合管道的方式可以根据实际需求选择不同的方法。以下是一些常见的方式:
- 条件判断:
根据前端传入的条件动态构建聚合管道。你可以使用条件判断语句(如 if 语句)来检查前端条件,并根据条件添加不同的聚合阶段到管道中。
假设我们的表结构是这样的
代码语言:ts复制// ticket表
{
"token": "6f9d245c-8b78-49fe-81f2-3ec71a6dc121",
"referenceSource": "12c3dacb",
"referenceId": "121345caaa",
"ticketNumber": "A1",
"phone": "27259654",
"type": 0,
"status": 0,
"ivrsStatus": 0,
"ivrsRetry": 0,
"blastStatus": 0,
"blastRetry": 0,
"apiVersion": 2,
"lang": "TC",
"platform": 1,
"cancelRetry": 0,
"called": 0,
"createdAt": {
"$date": "2024-02-19T03:53:36.661Z"
},
"updatedAt": {
"$date": "2024-02-19T03:53:36.661Z"
},
"syncToCloud": 0,
"tableSize": 4,
"id": "65d2d0c0434057a3419404be",
}
代码语言:ts复制// 假设前端要查询的status,phone是不一定有值的
var pipeline = [];
if (status) {
pipeline.push({ $match: {status:status } });
}
if (phone) {
pipeline.push({ $match: {phone:phone } });
}
// 添加更多的条件判断和聚合阶段
this.ticketModel.aggregate(pipeline)//ticketModel 是mongose model
- 动态函数: 将聚合管道构建过程封装到一个函数中,根据传入的参数动态生成聚合管道。
function buildPipeline(status, phone) {
var pipeline = [];
if (status) {
pipeline.push({ $match: {phone:phone } });
}
if (phone) {
pipeline.push({ $match: {phone:phone } });
}
return pipeline;
}
// 使用函数构建聚合管道
var pipeline = buildPipeline(status, phone);
以上是一些常见的动态构建 MongoDB 聚合管道的方式。根据你的具体需求和代码组织风格,你可以选择其中的一种或多种方式来实现动态构建聚合管道。