如何用“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。/})