如何用“like”查询MongoDB?
我想查询一些像SQL like
查询:
select * from users where name like '%m%'
如何在MongoDB中做同样的事情?
我找不到like
文件中的操作员。
那将是:
db.users.find({"name": /.*m.*/})
或类似的:
db.users.find({"name": /m/})
您正在寻找某处包含“m”的东西(SQL的' %
'运算符等同于Regexp的' .*
'),而不是在该string的开始处固定有“m”的东西。
db.users.insert({name: 'paulo'}) db.users.insert({name: 'patric'}) db.users.insert({name: 'pedro'}) db.users.find({name: /a/}) //like '%a%'
出来:保罗,帕特里克
db.users.find({name: /^pa/}) //like 'pa%'
出来:保罗,帕特里克
db.users.find({name: /ro$/}) //like '%ro'
出:佩德罗
在
- PyMongo使用Python
- 使用Node.js的 Mongoose
- Jongo ,使用Java
- mgo ,使用Go
你可以做:
db.users.find({'name': {'$regex': 'sometext'}})
在PHP中,你可以使用下面的代码:
$collection->find(array('name'=> array('$regex' => 'm'));
你可以在mongo中使用正则expression式。
例如: db.users.find({"name": /^m/})
如果使用node.js , 它说,你可以写这个:
db.collection.find( { field: /acme.*corp/i } ); //or db.collection.find( { field: { $regex: 'acme.*corp', $options: 'i' } } );
另外 ,你可以写这个:
db.collection.find( { field: new RegExp('acme.*corp', 'i') } );
已经有很多答案。 我正在给正则expression式的stringsearch提供不同types的要求和解决scheme。
你可以用正则expression式来包含单词,比如like。 也可以使用$options => i
进行不区分大小写的search
包含string
db.collection.find({name:{'$regex' : 'string', '$options' : 'i'}})
不包含只有正则expression式的string
db.collection.find({name:{'$regex' : '^((?!string).)*$', '$options' : 'i'}})
确切的不区分大小写的string
db.collection.find({name:{'$regex' : '^string$', '$options' : 'i'}})
从string
开始
db.collection.find({name:{'$regex' : '^string', '$options' : 'i'}})
以string
db.collection.find({name:{'$regex' : 'string$', '$options' : 'i'}})
保留这个作为书签,并为您可能需要的任何其他更改的参考。
你已经得到了答案,但匹配正则expression式不区分大小写
您可以使用以下查询
db.users.find ({ "name" : /m/i } ).pretty()
/m/i
表示不区分大小写, .pretty()
提供更漂亮的输出
对于Node.js中的Mongoose
db.users.find({'name': {'$regex': '.*sometext.*'}})
你可以使用2.6 mongodb的新特性:
db.foo.insert({desc: "This is a string with text"}); db.foo.insert({desc:"This is a another string with Text"}); db.foo.ensureIndex({"desc":"text"}); db.foo.find({ $text:{ $search:"text" } });
对于PHP Mongo来说。
我有几个问题与PHP mongo喜欢。 我发现连接正则expression式参数有助于在某些情况下PHP mongo查找字段开始 。 我想我会张贴在这里贡献更受欢迎的线程
例如
db()->users->insert(['name' => 'john']); db()->users->insert(['name' => 'joe']); db()->users->insert(['name' => 'jason']); // starts with $like_var = 'jo'; $prefix = '/^'; $suffix = '/'; $name = $prefix . $like_var . $suffix; db()->users->find(['name' => array('$regex'=>new MongoRegex($name))]); output: (joe, john) // contains $like_var = 'j'; $prefix = '/'; $suffix = '/'; $name = $prefix . $like_var . $suffix; db()->users->find(['name' => array('$regex'=>new MongoRegex($name))]); output: (joe, john, jason)
在nodejs项目中使用mongoose使用Like查询
var User = mongoose.model('User'); var searchQuery={}; searchQuery.email = req.query.email; searchQuery.name = {$regex: req.query.name, $options: 'i'}; User.find(searchQuery, function(error, user) { if(error || user === null) { return res.status(500).send(error); } return res.status(200).send(user); });
您可以使用where语句来构build任何JS脚本:
db.myCollection.find( { $where: "this.name.toLowerCase().indexOf('m') >= 0" } );
参考: http : //docs.mongodb.org/manual/reference/operator/where/
使用正则expression式匹配如下。 '我'显示不区分大小写。
var collections = mongoDatabase.GetCollection("Abcd"); var queryA = Query.And( Query.Matches("strName", new BsonRegularExpression("ABCD", "i")), Query.Matches("strVal", new BsonRegularExpression("4121", "i"))); var queryB = Query.Or( Query.Matches("strName", new BsonRegularExpression("ABCD","i")), Query.Matches("strVal", new BsonRegularExpression("33156", "i"))); var getA = collections.Find(queryA); var getB = collections.Find(queryB);
在Go和mgo司机:
Collection.Find(bson.M{"name": bson.RegEx{"m", ""}}).All(&result)
其中结果是寻求types的结构实例
在SQL中,“ like ”查询如下所示:
select * from users where name like '%m%'
在MongoDB控制台中,它看起来像这样:
db.users.find({"name": /m/}) // Not JSON formatted db.users.find({"name": /m/}).pretty() // JSON formatted
另外pretty()
方法会在所有产生格式化JSON结构的地方更具可读性。
你有两个select:
db.users.find({"name": /string/})
要么
db.users.find({"name": {"$regex": "string", "$options": "i"}})
在第二个,你有更多的select,如“我”在选项使用大小写不敏感。 而关于“string”,你可以使用像“ 。string。 ”(%string%)或者“string。*”(string%)和“。* string(%string)”。例如,你可以使用正则expression式如你所想。
请享用!
像查询将如下所示
db.movies.find({title: /.*Twelve Monkeys.*/}).sort({regularizedCorRelation : 1}).limit(10);
对于Scala ReactiveMongo api,
val query = BSONDocument("title" -> BSONRegex(".*"+name+".*", "")) //like val sortQ = BSONDocument("regularizedCorRelation" -> BSONInteger(1)) val cursor = collection.find(query).sort(sortQ).options(QueryOpts().batchSize(10)).cursor[BSONDocument]
由于Mongo shell支持正则expression式,这是完全可能的。
db.users.findOne({"name" : /.*sometext.*/});
如果我们希望查询不区分大小写,我们可以使用“i”选项,如下所示:
db.users.findOne({"name" : /.*sometext.*/i});
如果你想'喜欢'searchmongo那么你应该去与$正则expression式通过使用这个查询将是
db.product.find({name:{$regex:/m/i}})
更多你也可以阅读文档。 https://docs.mongodb.com/manual/reference/operator/query/regex/
使用MongoDB Compass,您需要使用严格模式语法,如下所示:
{ "text": { "$regex": "^Foo.*", "$options": "i" } }
(在MongoDB Compass中,使用"
而不是"
来重要)
如果你正在使用Spring-Data Mongodb你可以这样做:
String tagName = "m"; Query query = new Query(); query.limit(10); query.addCriteria(Criteria.where("tagName").regex(tagName));
我find了一个免费的工具来将MYSQL查询翻译成MongoDB。 http://www.querymongo.com/我查了几个查询。; 因为我几乎看到他们都是正确的。 据此,答案是
db.users.find({ "name": "%m%" });
似乎有理由使用javascript /regex_pattern/
模式以及mongo {'$regex': 'regex_pattern'}
模式。 请参阅: MongoBD RegEx语法限制
这不是一个完整的正则expression式教程,但我看到上面高度投票模棱两可的后,启发运行这些testing。
> ['abbbb','bbabb','bbbba'].forEach(function(v){db.test_collection.insert({val: v})}) > db.test_collection.find({val: /a/}) { "val" : "abbbb" } { "val" : "bbabb" } { "val" : "bbbba" } > db.test_collection.find({val: /.*a.*/}) { "val" : "abbbb" } { "val" : "bbabb" } { "val" : "bbbba" } > db.test_collection.find({val: /.+a.+/}) { "val" : "bbabb" } > db.test_collection.find({val: /^a/}) { "val" : "abbbb" } > db.test_collection.find({val: /a$/}) { "val" : "bbbba" } > db.test_collection.find({val: {'$regex': 'a$'}}) { "val" : "bbbba" }
MongoRegex已被弃用。
使用MongoDB \ BSON \ Regex
$regex = new MongoDB\BSON\Regex ( '^m'); $cursor = $collection->find(array('users' => $regex)); //iterate through the cursor
如果你正在使用PHP,你可以使用如下的MongoDB_DataObject包装:
$model = new MongoDB_DataObject(); $model->query("select * from users where name like '%m%'"); while($model->fetch()) { var_dump($model); }
要么:
$model = new MongoDB_DataObject('users); $model->whereAdd("name like '%m%'"); $model->find(); while($model->fetch()) { var_dump($model); }
全名像'最后'的状态=='待定'在两个date之间:
db.orders.find({ createdAt:{$gt:ISODate("2017-04-25T10:08:16.111Z"), $lt:ISODate("2017-05-05T10:08:16.111Z")}, status:"Pending", fullName:/last/}).pretty();
状态=='待定'和orderId LIKE'PHA876174':
db.orders.find({ status:"Pending", orderId:/PHA876174/ }).pretty();
db.customer.find({"customerid": {"$regex": "CU_00000*", "$options": "i"}}).pretty()
当我们searchstring模式时,总是最好使用上面的模式,因为当我们不确定情况。 希望有帮助!
在MongoDB中使用$regex
如何使用正则expression式
例
select * from table where abc like %v%
在蒙戈
var colName="v"; models.customer.find({ "abc": { $regex: '.*' + colName + '.*' } }, function(err,data){ console.log('data',data); });
你的查询看起来像
var name="john"; UserSchema.find({name: { $regex: '.*' + name + '.*' } }).limit(5);
> db.car.distinct('name') [“honda”,“tat”,“tata”,“tata3”]
> db.car.find({“name”:/。ta。/})