単語を検索するには、コレクションに存在するすべての製品の説明フィールドにその単語が含まれているため、大文字と小文字を区別しない正規表現の一致が必要です。次のクエリを使用できます(例として):
db.product.find({"data.description": /test/i});
ここで、 i
/ test / i
で 大文字と小文字を区別しないことを示します。したがって、正規表現は、文字列 "test"
を持つテキストの説明フィールドで一致します。 。同等のSQL式は次のとおりです。
select * from product where description like '%test%'
したがって、 find()
findOne()
これは1つのドキュメントのみを返します:
app.get("/description/:id", auth, function(req, res, next) {
req.collection.find({
"data.description": /req.params.id/i
}, function(e, result) {
if(e) return next(e);
res.send(result);
});
});
もう1つのオプションは、 $ text コード>
テキストインデックスでインデックス付けされたフィールドのコンテンツに対してテキスト検索を実行するための検索操作の演算子。したがって、最初に行うことは、説明フィールドにテキストインデックスを作成することです。
db.collection.createIndex( { "data.description": "text" } )
その後、$text演算子を使用してクエリを実行できます。たとえば、次のクエリはコーヒーという用語を検索します。
db.collection.find( { $text: { $search: "coffee" } } )
編集 :
すべてが同じであれば、ルート実装を更新して、代わりにURLでクエリ文字列を使用できます。
app.get("/description", auth, function(req, res, next) {
req.collection.find({
$text: { $search: req.params.q }
}, function(e, result) {
if(e) return next(e);
res.send(result);
});
});
これは、ブラウザで http:// localhost / description?q =product
としてクエリできます。