Мне нравится искать пользователя в mongoDb, ища пользователя с именем value. Проблема с:
username: 'peter'
в том, что я не нахожу, если имя пользователя - «Питер» или «Питер» .. или что-то в этом роде.
Итак, я хочу сделать как sql
SELECT * FROM users WHERE username LIKE 'peter'
Надеюсь, вы, ребята, получите то, о чем я прошу?
Кратко: 'поле LIKE value' в mongoose.js / mongodb
Peter
илиPeTER
ни какLIKE
не чувствителен к регистру.Ответы:
Для тех, кто искал решение, вот оно:
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")
router.route('/product/name/:name') .get(function(req, res) { var regex = new RegExp(req.params.name, "i") , query = { description: regex }; Product.find(query, function(err, products) { if (err) { res.json(err); } res.json(products); }); });
источник
Для этого вам следует использовать регулярное выражение.
db.users.find({name: /peter/i});
Однако будьте осторожны, этот запрос не использует index.
источник
мангуст док для находки. mongodb doc для регулярного выражения.
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"
для случая нечувствительного матча. Надеюсь, что это поможет вам.источник
Следующий запрос найдет документы с требуемой строкой без учета регистра, а также с глобальным вхождением.
var name = 'Peter'; db.User.find({name:{ $regex: new RegExp(name, "ig") } },function(err, doc) { //Your code here... });
источник
Это то, что я использую.
module.exports.getBookByName = function(name,callback){ var query = { name: {$regex : name} } User.find(query,callback); }
источник
Вот мой код с expressJS:
router.route('/wordslike/:word') .get(function(request, response) { var word = request.params.word; Word.find({'sentence' : new RegExp(word, 'i')}, function(err, words){ if (err) {response.send(err);} response.json(words); }); });
источник
если я хочу запросить всю запись при каком-либо условии , я могу использовать это:
if (userId == 'admin') userId = {'$regex': '.*.*'}; User.where('status', 1).where('creator', userId);
источник
$regex
что вы могли просто использовать{ $exists: true }
.Просто дополняя ответ @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 в параметр Mongoose 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 }) })
источник