在一个或多个字段中搜索MongoDB文档的值

时间:2013-03-30 22:49:35

标签: mongodb indexing database

我的应用程序中有一个搜索字段,我想以多种方式查询我的收藏。用户输入的搜索查询需要与name字段或url字段匹配。例如,一个看起来像这样的文档:

{ "name": "Google Maps", "url": "http://maps.google.co.uk/" }

如果我输入goog//mapsmaps google等,则应该匹配 - 您就可以了解相关信息。只需对多个字段进行不区分大小写的正则表达式搜索。

我知道如何使用正则表达式搜索字段以获取不区分大小写的值,但我是MongoDB(以及一般数据库)的新手,我不确定最佳解决方案是什么。我需要实施“复合指数”吗?如果是这样,我如何查询这两个字段的索引?

1 个答案:

答案 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} })