问题
I like to to go find a user in mongoDb by looking for a user called value. The problem with:
username: 'peter'
is that i dont find it if the username is "Peter", or "PeTER".. or something like that.
So i want to do like sql
SELECT * FROM users WHERE username LIKE 'peter'
Hope you guys get what im askin for?
Short: 'field LIKE value' in mongoose.js/mongodb
回答1:
Well. Just for people who are lookin for the answer i was i did like this
var name = 'Peter';
model.findOne({name: new RegExp('^'+name+'$', "i")}, function(err, doc) {
//Do your action here..
});
回答2:
I had problems with this recently, i use this code and work fine for me.
var data = 'Peter';
db.User.find({'name' : new RegExp(data, 'i')}, function(err, docs){
cb(docs);
});
Use directly /Peter/i work, but i use '/'+data+'/i' and not work for me.
回答3:
db.users.find( { 'username' : { '$regex' : req.body.keyWord, '$options' : 'i' } } )
回答4:
collection.findOne({
username: /peter/i
}, function (err, user) {
assert(/peter/i.test(user.username))
})
回答5:
You should use a regex for that.
db.users.find({name: /peter/i});
Be wary, though, that this query doesn't use index.
回答6:
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);
});
});
回答7:
mongoose doc for find. mongodb doc for regex.
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);
});
Note the first argument we pass to mongoose.findOne function: { "name" : { $regex: /Ghost/, $options: 'i' } }, "name" is the field of the document you are searching, "Ghost" is the regular expression, "i" is for case insensitive match. Hope this will help you.
回答8:
The following query will find the documents with required string case insensitively and with global occurrence also
var name = 'Peter';
db.User.find({name:{
$regex: new RegExp(name, "ig")
}
},function(err, doc) {
//Your code here...
});
回答9:
This is what I'm using.
module.exports.getBookByName = function(name,callback){
var query = {
name: {$regex : name}
}
User.find(query,callback);
}
回答10:
Here my code with 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);
});
});
回答11:
if I want to query all record at some condition,I can use this:
if (userId == 'admin')
userId = {'$regex': '.*.*'};
User.where('status', 1).where('creator', userId);
回答12:
Just complementing @PeterBechP 's answer.
Don't forget to scape the special chars. 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..
});
来源:https://stackoverflow.com/questions/9824010/mongoose-js-find-user-by-username-like-value