经过一些操作,我得到一个这样的字符串:qwertyuiop
。使用MongoDB我需要搜索该字符串的每个子字符串。所以我需要提出很多问题:qwertyuiop
,qwertyuio
,qwertyui
,qwertyu
... qw
,q
(在每次查询后,我从右边减去1个字母,直到该字符串成为一个字母)。所以我的node.js代码迭代一个子串数组,并在每次MongoDB查询时生成。
此代码对于数据库来说很重要,这也是性能低下的原因。我不太了解MongoDB和node.js。 如果你帮我解决这个问题,我会很高兴的。
答案 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。例如,请确保不使用不区分大小写的正则表达式,以便可以充分利用索引。