私は MongoDB にたくさんのレコードを保存していますが、それらは (ほとんど) タイトルケースで書かれています。サンプルプロトタイプ:
{
'name':'Awesome Pair of Jeans',
'designer':'Company123',
'description':'This pair of jeans is really great. Navy colour.'
},{
'name':'awesome jeans part 2',
'designer':'company123',
'description':'This pair of jeans is also navy in colour.'
}
フロントエンド (Angular/Node 上に構築) で、ユーザーがレコードを検索できるようにしたいのですが、MongoDB の検索では大文字と小文字が区別されるため、いくつかの問題があります。
現在、誰かが「名前」フィールドで「awesome」(小文字)という単語を検索した場合、両方を確認して返される唯一の方法はawesome
、Awesome
次のようにクエリすることです。
まず、クエリが正規表現でラップされます。したがって、ユーザーが「awesome」を検索すると、次のようにクエリに渡されます。name:/awesome/i
exports.postsQuery = function(req,res){
var query = req.params.query; // 'name:/awesome/i'
var properties = query.split('+');
var criteria = {};
properties.forEach(function(property) {
var propParts = property.split('=');
criteria[propParts[0]] = eval(propParts[1]); // criteria{name:/awesome/i};
});
db.products.find(criteria, function (err, record) {
// Do stuff
});
}
これは正しい結果を返しますが、それがどれほど安全であるか、これを行うためのより良い方法があるかどうか疑問に思っています.
この質問に似ています: Mongoでの大文字と小文字を区別しない検索ですが、速度とセキュリティのベストプラクティスは何ですか.