我的应用程序中有一个搜索字段,我想以多种方式查询我的收藏。用户输入的搜索查询需要与name
字段或url
字段匹配。例如,一个看起来像这样的文档:
{ "name": "Google Maps", "url": "http://maps.google.co.uk/" }
如果我输入goog
,//maps
,maps google
等,则应该匹配 - 您就可以了解相关信息。只需对多个字段进行不区分大小写的正则表达式搜索。
我知道如何使用正则表达式搜索字段以获取不区分大小写的值,但我是MongoDB(以及一般数据库)的新手,我不确定最佳解决方案是什么。我需要实施“复合指数”吗?如果是这样,我如何查询这两个字段的索引?
答案 0 :(得分:0)
按空格拆分输入,然后将每个输入添加到$or
的查询列表中:
db.collection.find({
$or: {
[
{name: /goog/i},
{url: /goog/i},
{name: /\/\/maps/i},
{url: /\/\/maps/i}
]
}
})
在节点中:
var query = "maps google";
var ors = [];
query.split(" ").forEach(function(q) {
ors[] = {name: new RegExp(q)};
ors[] = {url: new RegExp(q)};
});
db.collection.find({$or: {ors} })