【问题标题】:MongoDB (Mongoose) Search Query with including text?包含文本的MongoDB(猫鼬)搜索查询?
【发布时间】:2020-06-18 08:00:56
【问题描述】:

如果数据是

[ 
   { title: "banana awesome" },
   { title: "banana is good" },
   { title: "banana is good hahaha" },
   { title: "banana is delicious" },
]

我想查询“香蕉好”

结果应该是:

 [
   { title: "banana is good" },
   { title: "banana is good hahaha" }
 ]

我尝试了什么

const searchText = "banana good"

Fruits.find({ title: { $regex: `.*${searchText}.*`} }
Fruits.find({ title: { $regex: searchText }}

两者都不工作。我该怎么做?

【问题讨论】:

    标签: mongodb mongoose


    【解决方案1】:

    我相信您的正则表达式不正确。我也不是正则表达式专家。但是,这应该可行。

    Fruits.find({ title: /banana.+good/i });
    

    您必须从给定的字符串构建一个像 /banana.+good/i 这样的正则表达式字符串。

    您正在搜索一个子字符串banana good。但是,数据库中没有这样的子字符串。

    【讨论】:

    • 如何使用variable
    • 您可以使用str.replace() 函数将每个space 替换为.+。示例:searchText.replace(' ', '.+').
    • const re = new RegExp(${productName.replace(/ /g, '.+')}, 'gi') const 化妆品 = await Cosmetics.find({ productName: re}, null, { limit: 10 })
    • 现在我可以做到了!
    • @Juntae 请注意您正在使用的g。这意味着正则表达式将继续搜索字符串,即使它已经找到它。例如:banana good banana good 这个字符串如果你使用 g 那么它会寻找完整的字符串但是如果你不使用 g 那么它会在找到第一个 banana good 之后停止搜索。希望这是有道理的。
    【解决方案2】:

    在不向查询中添加正则表达式的情况下尝试一下

    const searchText = "banana good"
    
    Fruits.find({ title: /.*${searchText}.*/ }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-08-05
      • 1970-01-01
      • 2014-11-17
      • 2018-01-10
      • 2016-03-27
      • 2023-04-02
      • 2018-06-14
      • 1970-01-01
      相关资源
      最近更新 更多