ICode9

精准搜索请尝试: 精确搜索
首页 > 数据库> 文章详细

mongoDB, 利用正则筛选数据

2022-04-08 15:33:19  阅读:230  来源: 互联网

标签:字符 匹配 mongoDB Object 正则 表达式 筛选 assign condition


node代码示例如下:

async getAll({ propertyId, name, reportType, fileFormat, expiredTime, groupId, category }) {
    const { helper } = this.ctx;
    let condition = {};
    condition = propertyId ? Object.assign(condition, { propertyId }) : condition;
    condition = name ? Object.assign(condition, { name: { $regex: new RegExp(helper.escapeSpecialCharacter(name), 'i') } }) : condition; // name是从外部(如页面传入的,当作正则来处理,需对正则特殊字符过滤)
    condition = reportType ? Object.assign(condition, { reportType }) : condition;
    condition = fileFormat ? Object.assign(condition, { fileFormat }) : condition;
    condition = groupId ? Object.assign(condition, { groupId }) : condition;
    condition = category ? Object.assign(condition, { category }) : condition;
    if (expiredTime) {
      condition = {
        $or: [
          {
            $and: [
              { createdAt: { $lt: moment.utc().subtract(45, 'days').format('YYYY-MM-DDThh:mm:ss.SSSZ') } },
              { lastDownloadTime: { $gt: moment.utc().format('YYYY-MM-DDThh:mm:ss.SSS[Z]') } }
            ]
          },
          {
            $and: [
              { lastDownloadTime: { $lt: moment.utc().format('YYYY-MM-DDThh:mm:ss.SSS[Z]') } },
              { lastDownloadTime: { $lt: moment.utc().subtract(45, 'days').format('YYYY-MM-DDThh:mm:ss.SSS[Z]') } },
            ]
          }
        ]
      };
    }
    condition = Object.assign(condition);
    const allReports = await ReportModal.find(condition).sort({ updatedAt: -1 });
    return allReports;
  }

正则转义特殊字符方法:
const escapeSpecialCharacter = (str) => {
  const reg = /[\-\/\{\}\*\+\?\.\\\^\$\|\(\)]/g;
  return str.replace(reg, '\\$&');
};


正则中需转义特殊字符如下:

特别字符

说明

$

匹配输入字符串的结尾位置。如果设置了 RegExp 对象的 Multiline 属性,则 $ 也匹配 ‘\n' 或 ‘\r'。要匹配 $ 字符本身,请使用 \$。

( )

标记一个子表达式的开始和结束位置。子表达式可以获取供以后使用。要匹配这些字符,请使用 \( 和 \)。

*

匹配前面的子表达式零次或多次。要匹配 * 字符,请使用 \*。

+

匹配前面的子表达式一次或多次。要匹配 + 字符,请使用 \+。

.

匹配除换行符 \n之外的任何单字符。要匹配 .,请使用 \。

[ ]

标记一个中括号表达式的开始。要匹配 [,请使用 \[。

?

匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。要匹配 ? 字符,请使用 \?。

\

将下一个字符标记为或特殊字符、或原义字符、或向后引用、或八进制转义符。例如, ‘n' 匹配字符 ‘n'。'\n' 匹配换行符。序列 ‘\\' 匹配 “\”,而 ‘\(' 则匹配 “(”。

^

匹配输入字符串的开始位置,除非在方括号表达式中使用,此时它表示不接受该字符集合。要匹配 ^ 字符本身,请使用 \^。

{ }

标记限定符表达式的开始。要匹配 {,请使用 \{。

|

指明两项之间的一个选择。要匹配 |,请使用 \|。


所以是
如下:

* . ? + $ ^ [ ] ( ) { } | \ /

标签:字符,匹配,mongoDB,Object,正则,表达式,筛选,assign,condition
来源: https://www.cnblogs.com/jimaww/p/16117333.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有