简体   繁体   English

Mongoose 使用 $regex 中的数字进行搜索

[英]Mongoose search using numbers in $regex

I have a piece of code that I use to search values in my mongoose DB and I'm looking for a way to search numbers (like Order number or Service number etc), but I'm struggling to find a way to do this.我有一段代码用于在我的 mongoose 数据库中搜索值,我正在寻找一种方法来搜索数字(如订单号或服务号等),但我正在努力寻找一种方法来执行此操作。

My code:我的代码:

async getSearchOrders(params) {
    const queryString = params.callParams.search;
    const queryStrings = queryString.split(" ");
    let allQueries = [];
    queryStrings.forEach((element) => {
        allQueries.push({ "company.name": { $regex: String(element), $options: "i" } });
        allQueries.push({ "company.user.firstName": { $regex: String(element), $options: "i" } });
        allQueries.push({ "company.user.lastName": { $regex: String(element), $options: "i" } });
        allQueries.push({ "jobs.service.name": { $regex: String(element), $options: "i" } });
        allQueries.push({ "jobs.reference": { $regex: String(element), $options: "i" } });
    });

    let dummyConsultants = [{ consultant: "Covert Blue" }, { consultant: "Sour Lemon" }, { consultant: "Sweet Peach" }, { consultant: "Till Lindeman" }, { consultant: "Jack Frost" }];
    try {
        let dbFilter = {};
        let resultsData = await Orders.aggregate([
            { $match: { _active: true } },
            {
                $lookup: {
                    from: "companies",
                    localField: "company",
                    foreignField: "_id",
                    as: "company",
                },
            },
            { $unwind: "$company" },
            {
                $lookup: {
                    from: "users",
                    localField: "company.user",
                    foreignField: "_id",
                    as: "company.user",
                },
            },
            { $unwind: "$company.user" },
            {
                $lookup: {
                    from: "jobs",
                    localField: "jobs",
                    foreignField: "_id",
                    as: "jobs",
                },
            },
            { $unwind: "$jobs" },
            {
                $lookup: {
                    from: "services",
                    localField: "jobs.service",
                    foreignField: "_id",
                    as: "jobs.service",
                },
            },
            { $unwind: "$jobs.service" },
            {
                $match: { $or: allQueries },
            },
            {
                $group: {
                    _id: "$_id",
                    root: { $mergeObjects: "$$ROOT" },
                    jobs: { $push: "$jobs" },
                },
            },
            {
                $replaceRoot: {
                    newRoot: {
                        $mergeObjects: ["$root", "$$ROOT"],
                    },
                },
            },
            {
                $project: {
                    root: 0,
                },
            },
        ]);

Here you can see I pass in jobs.reference which is a number and I'm not sure how to either convert the value I push into allQueries or modify what I push for it to work.在这里您可以看到我传入了 jobs.reference,这是一个数字,我不确定如何将我推送的值转换为 allQueries 或修改我推送的内容以使其工作。

You can use $toString before the query to convert numbers or ObjectId into strings.您可以在查询之前使用 $toString 将数字或 ObjectId 转换为字符串。

{$addFields: {order_number: { $toString: "$order_number" } }},

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM