回答:
ここで解決策を探していた人のためにそれは:
var name = 'Peter';
model.findOne({name: new RegExp('^'+name+'$', "i")}, function(err, doc) {
//Do your action here..
});
".*"
し、ユーザーをユーザー名として入力したとします。
私は最近これで問題がありました、私はこのコードを使用して私のためにうまくいきます。
var data = 'Peter';
db.User.find({'name' : new RegExp(data, 'i')}, function(err, docs){
cb(docs);
});
直接/Peter/i
作業を使用しますが、私は使用し'/'+data+'/i'
、私のためには機能しません。
db.users.find( { 'username' : { '$regex' : req.body.keyWord, '$options' : 'i' } } )
collection.findOne({
username: /peter/i
}, function (err, user) {
assert(/peter/i.test(user.username))
})
new RegExp(var, "i")
そのためには正規表現を使用する必要があります。
db.users.find({name: /peter/i});
ただし、このクエリはインデックスを使用しないことに注意してください。
検索用のマングースのドキュメント。正規表現のmongodbドキュメント。
var Person = mongoose.model('Person', yourSchema);
// find each person with a name contains 'Ghost'
Person.findOne({ "name" : { $regex: /Ghost/, $options: 'i' } },
function (err, person) {
if (err) return handleError(err);
console.log('%s %s is a %s.', person.name.first, person.name.last, person.occupation);
});
mongoose.findOne
関数に渡す最初の引数に注意してください{ "name" : { $regex: /Ghost/, $options: 'i' } }
。"name"
は、検索しているドキュメントのフィールド"Ghost"
、正規表現、"i"
大文字と小文字を区別しない一致です。これがお役に立てば幸いです。
@PeterBechPの回答を補足するだけです。
特別なイワナを逃がすことを忘れないでください。 https://stackoverflow.com/a/6969486
function escapeRegExp(string) {
return string.replace(/[.*+?^${}()|[\]\\]/g, '\\$&');
}
var name = 'Peter+with+special+chars';
model.findOne({name: new RegExp('^'+escapeRegExp(name)+'$', "i")}, function(err, doc) {
//Do your action here..
});
これは、req.bodyのすべての値をマングースのLIKEパラメータに変換するための私のソリューションです。
let superQ = {}
Object.entries({...req.body}).map((val, i, arr) => {
superQ[val[0]] = { '$regex': val[1], '$options': 'i' }
})
User.find(superQ)
.then(result => {
res.send(result)})
.catch(err => {
res.status(404).send({ msg: err }) })
Peter
またはPeTER
どちらも検出しLIKE
ません。