首页 > 解决方案 > 使用猫鼬的 Atlas 文本搜索返回一个空数组

问题描述

我正在尝试创建一个自动完成的表单字段。我已经在 Atlas 中正确设置了搜索索引。我可以通过在 MongoDB 游乐场(VSCode 扩展)中运行以下命令来测试它:

use("Development");
db;
db.PlcMarketCaps.aggregate([
    {
        $search: {
            index: "default",
            autocomplete: {
                query: "SCOT",
                path: "companyName",
                fuzzy: { maxEdits: 1 }
            }
        }
    }
]);

这按预期工作。但是,当我在使用 mongoose 的项目中合并相同的命令时,它只会返回一个空数组。这是我正在使用的代码:

export async function searchPlcCompanies(query: string): Promise<string[] | undefined> {
    return PlcMarketCap.aggregate()
        .search({
            index: "default",
            autocomplete: {
                query: `${query}`,
                path: "companyName",
                fuzzy: { maxEdits: 1 }
            }
        })
        .then((response) => {
            console.log(response);
            return response;
        })
        .catch((error: Error) => {
            throw error;
        });
}

我也试过:

export async function searchPlcCompanies(query: string): Promise<string[] | undefined> {
    return PlcMarketCap.aggregate()
        $search: {
            autocomplete: {
                query: `${query}`,
                path: "companyName",
                fuzzy: {
                    maxEdits: 2,
                    prefixLength: 3
                }
            }
       }
}

调试器向我显示该函数接收到正确的查询字符串。这和 MongoDB 游乐场命令之间的唯一区别是它首先通过 mongoose。有谁知道我做错了什么?

标签: mongodbmongoosemongodb-atlas

解决方案


推荐阅读