Nodejs中,mongodb如何使用正则模糊查询以逗号分割的标签?

发布于 1周前 作者 htzhanglong 来自 nodejs/Nestjs

Nodejs中,mongodb如何使用正则模糊查询以逗号分割的标签?

有数据如下:

{"title":"我是标题","tag":"tag,tag1,tag2,tag3,tag7"}
{"title":"我是标题","tag":"tag5,tag6"}
{"title":"我是标题","tag":"tag7"}

可以看到,这里的标签是以英文逗号分割的字符串,mongoskin中,我这样查找

db.post.find({tags:new RegExp(‘tag’)}).toArray()

我的正则很明显写得不够。还需要判断如果某个标签的内容包含我查找的标签的情况。

想在 tag 前后逗号,但这个标签字符串可能只有一个

请大神帮忙写一下正则,可以精准匹配。


8 回复

要在 Node.js 中使用 MongoDB 对以逗号分隔的标签进行正则模糊查询,可以通过构建一个正则表达式来实现。这个正则表达式需要确保匹配的标签前后都有逗号,或者是在字符串的开头或结尾。

以下是一个具体的例子:

示例代码

const MongoClient = require('mongodb').MongoClient;

// 连接字符串
const url = 'mongodb://localhost:27017';
const dbName = 'mydatabase'; // 数据库名

// 创建客户端连接
MongoClient.connect(url, function(err, client) {
    if (err) {
        console.log("数据库连接失败");
        return;
    }
    console.log("数据库已连接");

    const db = client.db(dbName);
    const collection = db.collection('posts'); // 集合名

    // 要查找的标签
    const searchTag = 'tag';

    // 构建正则表达式
    const regex = new RegExp(`(^|,)(${searchTag})(,|$)`);

    // 执行查询
    collection.find({ tag: regex }).toArray(function(err, docs) {
        if (err) {
            console.log("查询失败");
            return;
        }

        console.log("查询结果:", docs);
        client.close();
    });
});

解释

  1. 构建正则表达式:

    • new RegExp((^|,)(${searchTag})(,|$)):
      • ^ 表示字符串的开始。
      • , 表示逗号。
      • (${searchTag}) 是我们要查找的标签。
      • , 表示逗号。
      • $ 表示字符串的结束。

    这个正则表达式确保了标签前后都有逗号,或者是在字符串的开头或结尾。

  2. 执行查询:

    • collection.find({ tag: regex }): 使用构建好的正则表达式对 tag 字段进行查询。
    • .toArray() 将查询结果转换为数组。

通过这种方式,你可以精确地匹配到包含特定标签的数据。


var tag = "tag,tag1,tag2,tag3,tag7"; 
if ( tag.indexOf(",") != -1 ) { 
    tag.split(",") 
}

不需要正则这么复杂吧!

在mongodb 里的数据。

//这不就是查询包含逗号的吗?
db.post.find({tags:/,/});

还有我看你文字写的逻辑不对,不知道你到底表达什么含义,只能根据你的标题给予以上的解释!

lz的意思是,查询 标签有“tag”的数据 如以下3个数据,只会返回第一条,而2,3条不应该返回。 {“title”:“我是标题”,“tag”:“tag,tag1,tag2,tag3,tag7”} {“title”:“我是标题”,“tag”:“tag5,tag6”} {“title”:“我是标题”,“tag”:“tag7”}

正则感觉能写出来 不过我不会写 呵呵 另外tag你可以存成其他数据格式,比如数组或则子文档,应该比较容易查询吧

将tag存成数组,使用$regex或者$in很容易查询

要在 Node.js 中使用 MongoDB 对以逗号分隔的标签进行正则模糊查询,并且能够处理标签字符串可能只有一个的情况,可以使用正则表达式来匹配包含特定标签的所有情况。

假设你的标签字段是 tag,你可以编写一个正则表达式来匹配任何包含特定标签(例如 tag)的文档。这个正则表达式需要考虑到标签前后的逗号,或者标签位于字符串的开始或结束位置。

以下是一个示例代码:

const MongoClient = require('mongodb').MongoClient;
const uri = "your_mongodb_connection_string_here";
const client = new MongoClient(uri, { useNewUrlParser: true, useUnifiedTopology: true });

async function searchTags(tag) {
    await client.connect();
    const db = client.db("your_database_name");
    const collection = db.collection("posts");

    // 构建正则表达式
    const regex = new RegExp(`(^|,)${tag}(,|$)`, 'i');

    // 执行查询
    const result = await collection.find({ tag: regex }).toArray();

    console.log(result);
    await client.close();
}

// 调用函数并传入要搜索的标签
searchTags('tag');

解释

  1. 构建正则表达式:

    • new RegExp((^|,)${tag}(,|$), 'i'):
      • ^|, 表示标签可以在字符串的开头或紧随一个逗号之后。
      • ${tag} 是你要搜索的具体标签。
      • (,|$) 表示标签可以在紧跟一个逗号的位置或字符串的结尾。
      • 'i' 表示不区分大小写。
  2. 执行查询:

    • collection.find({ tag: regex }).toArray() 将会找到所有满足条件的文档。
  3. 调用函数:

    • searchTags('tag') 函数将调用查询并打印结果。

这种方法可以确保在标签字符串中正确地查找包含特定标签的所有情况。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!