使用nodejs在mongo中跨多个字符串字段进行高效的文本搜索

时间:2017-03-23 10:52:51

标签: node.js mongodb

像这样的10000条记录存储在mongo中。如何在node.js中有效地搜索以下内容。搜索条件可以基于mongo中的以下3个字段中的任何一个。搜索条件将来自前端,他们可以搜索userID或employeeName或部门。对于搜索,只会输入一个输入,即只有一个字段可以匹配任何这些字段,如谷歌搜索。

{
      "userID": "01000900",
      "employeeName": "A Abc",
      "department": "Replenishment Boston"
    },
    {
      "userID": "01001024",
      "employeeName": "K Gbc",
      "department": "Sales S-II - MA Core Urb"
    },
    {
      "userID": "01001023",
      "employeeName": "Ga Va",
      "department": "Sales Phoenix"
    },
    {
      "userID": "01000282",
      "employeeName": "D Din",
      "department": "Sales S-II - California - Me"
    }

3 个答案:

答案 0 :(得分:2)

假设 searchText 是您从客户端获取的值。使用正则表达式。

{
  $or:[
     {userId:{$regex: searchText, $options: 'i'}},
     {employeeName:{$regex: searchText, $options: 'i'}},
     {department:{$regex: searchText, $options: 'i'}}
  ]
}

答案 1 :(得分:2)

您可以在以下所有3个字段中使用Text index

db.collection.createIndex(
    {
        userID: "text",
        employeeName: "text",
        department: "text"
    }
)

查询db.collection.find( { $text: { $search: "string from input" } } )

应该像谷歌搜索一样Docs for text query syntax

答案 2 :(得分:0)

您可以为每个字段创建索引。通过这种方式,当您获取某些数据时,它将不会扫描整个文档。搜索将基于索引。所以你会立即得到结果。现在用于创建索引。假设您要在employeeName上创建索引,请执行以下操作:

db.collectionName.createIndex({employeeName:1});