mongodb 前端条件动态查询的几种方式

2024-02-22 14:51:41 浏览数 (2)

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
  • 动态函数: 将聚合管道构建过程封装到一个函数中,根据传入的参数动态生成聚合管道。
代码语言:ts复制

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 聚合管道的方式。根据你的具体需求和代码组织风格,你可以选择其中的一种或多种方式来实现动态构建聚合管道。

0 人点赞