MongoDB聚合与路由中的Mongoose

qmelpv7a  于 2023-03-30  发布在  Go
关注(0)|答案(2)|浏览(468)

使用Mongoose在Node / Express应用程序中处理MongoDB中的聚合。路线如下:

router.get("/search", async (req, res) => {
    let movies;
    if(req.query.search){
        escapeRegex(req.query.search);
        const regex = new RegExp(escapeRegex(req.query.search), 'gi');
    
        movies = await Movie.aggregate(
            [
                { '$match': {'title': regex} },
                { '$limit': 5 }
            ], (err, result) => {
                if (err) {
                    console.log(err)
                } else {
                    console.log(result)
                }
            }
    );

    console.log("Result:", movies);
    res.render("atlas/search", {movies: returnedMovies});

} else {
    Movie.find({}).sort('title').limit(10).exec((err, allMovies) => {
        if(err){
            console.log(err);
        } else {
            res.render("atlas/search",{movies: allMovies});
        }
    });
  }
});

本质上,我在这里做的是从搜索栏中获取用户输入,然后通过聚合运行该输入;然而,我无法得到任何结果(点击我的404未找到页面),并且通过我的任何console.log尝试都没有返回到控制台。else路由,如果没有搜索,则返回前10部电影,工作正常。
我错过了什么?

wh6knrhe

wh6knrhe1#

替换此代码

escapeRegex(req.query.search);
const regex = new RegExp(escapeRegex(req.query.search), 'gi');

const regex = new RegExp(req.query.search, 'i');

这个也许能帮上忙

0ejtzxu1

0ejtzxu12#

要进行基于正则表达式的搜索,需要在$match stage中使用运算符$regex。如下所示:

{ '$match': {'title': { $regex: regex } } }

相关问题