相关疑难解决方法(0)

如何用"喜欢"查询MongoDB?

我想查询一下SQL的like查询:

SELECT * FROM users  WHERE name LIKE '%m%'
Run Code Online (Sandbox Code Playgroud)

如何在MongoDB中做同样的事情?
like文档中找不到运算符.

sql mongodb mongodb-query sql-like

1331
推荐指数
27
解决办法
92万
查看次数

Mongo Regex Search的索引界限

我正在使用MongoDB,我有一组具有以下结构的文档:

{
    fName:"Foo",
    lName:"Barius",
    email:"fbarius@example.com",
    search:"foo barius"
}
Run Code Online (Sandbox Code Playgroud)

我正在构建一个将在该search字段上执行正则表达式搜索的函数.为了优化性能,我已在搜索字段中为此集合编制索引.然而,事情仍然有点慢.所以我运行了explain()一个示例查询:

db.Collection.find({search:/bar/}).explain();
Run Code Online (Sandbox Code Playgroud)

在获胜计划下,我看到使用了以下索引边界:

"search": [
        "[\"\", {})",
        "[/.*bar.*/, /.*bar.*/]"
]
Run Code Online (Sandbox Code Playgroud)

第二组是有道理的 - 它从包含条形的任何东西看到包含条形的任何东西.然而,第一集让我感到困惑.它似乎正在寻找""包容性与{}排他性的界限.我担心这个额外的界限会减慢我的查询速度.有必要保留吗?如果不是,我怎么能阻止它被包括在内?

regex indexing mongodb

15
推荐指数
1
解决办法
511
查看次数

实时搜索 + 文本索引的 MongoDB“扫描对象/返回已超过 1000”

我们的 React 应用程序有一个实时搜索,该搜索连接到包含 25 万个人姓名的 MongoDB 集合。在击键时,实时搜索使用正则表达式来抓取集合中的前 20 个文档。我们为 Live Search 获取数据的路径很简单,如下所示:

router.get('/live-search/text/:text', function (req, res) {
    let text = req.params.text;
    let queryFilters = { label: { $regex: `${text}`, $options: 'i' } };

    db.gs__ptgc_selects.find(queryFilters).limit(20)
        .then(data => res.json(data))
        .catch(err => res.status(400).json('Error: ' + err))
});
Run Code Online (Sandbox Code Playgroud)

我确定我们的集合有文本索引,它是在label列上设置的。这是我们的 MongoDB Atlas 页面的屏幕截图,如下所示:

在此处输入图片说明

问题是该索引似乎不起作用。每当使用我们应用程序的实时搜索时(一直如此),我继续收到电子邮件警告Query Targeting: Scanned Objects / Returned has gone above 1000。我已经检查了这些查询的 MongoDB Atlas Profiler,并且(我认为)确认没有使用索引:

在此处输入图片说明

我错过了什么吗?很难从中创建一个完全可重现的示例。我们一直在努力使用 MongoDB 文本索引并将其与我们的实时搜索一起使用。

编辑

也许我需要使用$search,就像在这里完成的一样:https : //docs.mongodb.com/manual/text-search/。我目前正在使用 进行字符串匹配regex,但没有使用 …

indexing livesearch mongodb

6
推荐指数
0
解决办法
2521
查看次数

标签 统计

mongodb ×3

indexing ×2

livesearch ×1

mongodb-query ×1

regex ×1

sql ×1

sql-like ×1