【问题标题】:Express and MongoDB, problem with escape characters in the collection.find while using $text and $searchExpress 和 MongoDB,使用 $text 和 $search 时 collection.find 中的转义字符问题
【发布时间】:2021-06-24 22:02:39
【问题描述】:

根据 MongoDB 文档,

db.articles.find( { $text: { $search: "\"coffee shop\"" } } )

需要将其在 collection.find 中的转义字符插入到属于 req.query.name 的名为 query 的变量中!这样,text index 就可以使用了。

var query = req.query.name;

collection.find({ $text: { $search: '"\"' + query + '\""'}})

我也试过

'"\"query\""'

不幸的是,我的预期不起作用,你有什么解决办法吗?谢谢

【问题讨论】:

    标签: javascript mongodb express mongodb-query


    【解决方案1】:

    一种方法是使用ES6 template literals。试试这个:

    var query = `"${req.query.name}"`;
    
    collection.find({ $text: { $search: query}})
    

    var query = '"' + req.query.name + '"';
    
    collection.find({ $text: { $search: query}})
    

    【讨论】:

    • 感谢解答,问题是它不跟随索引,所以查询会很慢。没有任何东西,而是运行,这是一种美!
    • 我也尝试过使用正则表达式,但同样它只使用 '^' 跟随索引,所以我找不到字符串的结尾!
    【解决方案2】:

    试试这个,这将有助于进行与 Mongodb 文档中提到的相同的查询。它也会使用你的索引。

    var value = `\\"${query}\\"`;
    collection.find({ $text: { $search: value}})
    

    如果您的外部双引号丢失,请尝试以下操作:

    var value = `"\\"${query}\\""`
    collection.find({ $text: { $search: value}})
    

    【讨论】:

    • 感谢回复,无事可做是不能关注索引!从 mongo shell 完美运行!在快递它失败,从调试返回(如你所建议):"\\" coffee shop \\ "" 而在外壳一切正常$search: "\"coffee shop\""
    • 我忘记了,如果我用以下方式初始化变量:var value = "\"coffee shop\"" 即使在快递中一切正常,但不幸的是我不需要咖啡店这个词来搜索;)
    猜你喜欢
    • 2016-06-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-02-10
    • 1970-01-01
    • 1970-01-01
    • 2023-01-12
    • 1970-01-01
    相关资源
    最近更新 更多