MongoDB:进行一系列查询

时间:2018-03-10 20:42:42

标签: node.js mongodb for-loop search

情况

经过一些操作,我得到一个这样的字符串:qwertyuiop。使用MongoDB我需要搜索该字符串的每个子字符串。所以我需要提出很多问题:qwertyuiopqwertyuioqwertyuiqwertyu ... qwq(在每次查询后,我从右边减去1个字母,直到该字符串成为一个字母)。所以我的node.js代码迭代一个子串数组,并在每次MongoDB查询时生成。

问题

此代码对于数据库来说很重要,这也是性能低下的原因。我不太了解MongoDB和node.js。 如果你帮我解决这个问题,我会很高兴的。

1 个答案:

答案 0 :(得分:1)

您可以使用$in operator在单个查询中搜索所有这些匹配项:

db.collection.find({ fieldName: { $in: ['qwertyuiop', 'qwertyuio', 'qwertyui', 'qwertyu', 'qwerty', 'qwert','qwer', 'qwe', 'qw', 'q'] } })

或者,您可以使用regex进行搜索:

db.collection.find({ fieldName: /^qw?e?r?t?y?u?i?o?p?/ })

如果你不熟悉正则表达式,这里有tutorial

虽然这将允许您只对数据库进行一次查询,但这些查询本身可能非常昂贵。将索引匹配的字段编入索引非常重要,这样才能获得最佳性能。

如果您使用正则表达式,则有extra considerations to make sure they are efficient。例如,请确保不使用不区分大小写的正则表达式,以便可以充分利用索引。