2017-03-23 9 views
1

mongoに格納されているこのような10000レコードがあります。 node.jsで以下を効率的に検索する方法検索条件は、mongoの以下の3つのフィールドのいずれかに基づいています。検索基準はフロントエンドから来て、userIDまたはemployeeNameまたは部門を検索できます。検索のために、入力が1つだけ、すなわち、これらのフィールドのいずれかと一致することができる1つのフィールドがgoogle検索のように行われる。mongoの複数の文字列フィールドにわたる効率的なテキスト検索(nodejsを使用)

{ 
     "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" 
    } 
+0

各フィールドのインデックスを確認します([** mongodb indexes **](https://docs.mongodb.com/manual/reference/method/db.collection.ensureIndex/)参照)。次に、[** find()**](https://mongodb.github.io/node-mongodb-native/markdown-docs/queries.html)を使用してドキュメントを検索してください。 – felix

+0

私はそれを調べて更新します私の所見。 – Aneek

答えて

2

検索テキストはあなたがクライアントから取得している値であると仮定します。正規表現を使用してください。

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

Monishaありがとうございました。私はこのことを確認します。 – Aneek

+0

ありがとうございました。 – Aneek

0

フィールドごとにインデックスを作成できます。このようにして、データを取得すると、ドキュメント全体をスキャンすることはありません。検索はインデックスに基づいて行われます。あなたは即座に結果を得るでしょう。索引を作成します。あなたは、次の操作を行い、その後employeeNameに索引を作成するとします:

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

あなたは次のようにすべての3つのフィールドにText indexを使用することができます。

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

をクエリdb.collection.find({ $text: { $search: "string from input" } })

何かをする必要がありますgoogle検索のように。 Docs for text query syntax

関連する問題