如何使“LIKE”查询在 MongoDB 中工作?
Posted
技术标签:
【中文标题】如何使“LIKE”查询在 MongoDB 中工作?【英文标题】:How to make "LIKE" query work in MongoDB? 【发布时间】:2011-04-27 00:44:33 【问题描述】:我有一个街道名称列表,我想选择所有以“Al”开头的名称。 在我的 mysql 中,我会做类似的事情
SELECT * FROM streets WHERE "street_name" LIKE "Al%"
MongoDB 使用 php 怎么样?
【问题讨论】:
【参考方案1】:使用正则表达式:
db.streets.find( street_name : /^Al/i );
或:
db.streets.find( street_name : $regex : '^Al', $options: 'i' );
http://www.mongodb.org/display/DOCS/Advanced+Queries#AdvancedQueries-RegularExpressions
把它变成 PHP:
$regex = new MongoRegex("/^Al/i");
$collection->find(array('street_name' => $regex));
【讨论】:
是的,但是在 php 中呢? $database->streets->find(array("street" => "/^Al/i")); 作为一个附带问题,这在原始速度方面如何比较?使用正则表达式过滤数据集的想法让我有点畏缩......不过是 mongodb 的新手。 只要正则表达式以 ^ 开头(即匹配字符串的开头),就会使用索引。【参考方案2】:见:http://www.mongodb.org/display/DOCS/SQL+to+Mongo+Mapping+Chart
另外,强烈建议只使用 PHP 中的本机 mongodb 连接器,而不是包装器。它比任何包装器都快。
http://php.net/class.mongodb
【讨论】:
【参考方案3】:这是我的工作示例:
<?php
use MongoDB\BSON\Regex;
$collection = $yourMongoClient->yourDatabase->yourCollection;
$regex = new Regex($text, 's');
$where = ['your_field_for_search' => $regex];
$cursor = $collection->find($where);
//Lets iterate through collection
【讨论】:
【参考方案4】:$collection.find("name": /.*Al.*/)
或者,类似的,
$collection.find("name": /Al/)
您正在寻找某处包含“Al”的内容(SQL 的 '%' 运算符等效于正则表达式''.*'),而不是在字符串开头锚定“Al”的内容。
【讨论】:
【参考方案5】:MongoRegex 已被弃用。 使用MongoDB\BSON\Regex
$regex = new MongoDB\BSON\Regex ( '^A1');
$cursor = $collection->find(array('street_name' => $regex));
//iterate through the cursor
【讨论】:
【参考方案6】:<?php
$mongoObj = new MongoClient();
$where = array("name" => new MongoRegex("^/AI/i"));
$mongoObj->dbName->collectionName->find($where);
?>
View for more details
【讨论】:
【参考方案7】:你也可以这样做
['key' => ['$regex' => '(?i)value']]
【讨论】:
以上是关于如何使“LIKE”查询在 MongoDB 中工作?的主要内容,如果未能解决你的问题,请参考以下文章
关于使按钮在 Netbeans 的 GUI 编辑器中工作的 JDBC 到 JTable 输出查询
如何使 PFQueryTableView 在 UIViewController 中工作
日期和时间过滤器在 find() 操作中工作正常,但 $match 与 mongodb 中的聚合出现问题