> 백엔드 개발 > PHP 튜토리얼 > php7이 MongoDB 퍼지 쿼리를 구현하는 방법에 대한 자세한 설명

php7이 MongoDB 퍼지 쿼리를 구현하는 방법에 대한 자세한 설명

*文
풀어 주다: 2023-03-19 07:08:01
원래의
2873명이 탐색했습니다.

php7에서 MongoDB 퍼지 쿼리를 구현하는 방법은 무엇입니까? MongoDB 퍼지 쿼리 문은 모든 사람에게 친숙할 것이라고 생각합니다. 이 기사에서는 주로 PHP 7의 MongoDB에서 퍼지 쿼리를 구현하는 방법을 소개합니다. 이 기사에서는 모든 사람을 위한 특정 참조 및 학습 가치가 있는 자세한 소개와 샘플 코드를 제공합니다. 그것이 모두에게 도움이 되기를 바랍니다.

머리말

실제 개발에서 퍼지 쿼리를 사용해야 하는 시나리오는 많습니다. MongoDB 쉘 퍼지 쿼리는 매우 간단합니다.

db.collection.find({'_id': /^5101/})
로그인 후 복사

위 문장은 '5101'로 시작하는 query_id의 내용입니다.

퍼지 쿼리는 이전 MogoDB에서 매우 간단합니다. 퍼지 쿼리의 작업 방법에 대한 간단한 기록은 다음과 같습니다. 다음은 주로 새 PHP 드라이버에서 쿼리하는 방법에 대한 것입니다.

db.letv_logs.find({"ctime":/uname?/i});
로그인 후 복사
위는 새 드라이버에서 퍼지 쿼리를 실행하는 것입니다. 솔직히 말해서 이전 드라이버에 비해 상당히 불만스럽습니다. , 함수 이름이 너무 깁니다. . . 이는 Swift의 함수 이름 그 이상입니다. 또한, 새 드라이버에서는 이전 드라이버의 많은 기능이 제거되었습니다. 작동을 위해 mongodb php 라이브러리 클래스 라이브러리가 제공되지만 이 라이브러리에는 60개 이상의 파일이 있으며 때로는 내 프로젝트 파일보다 더 많은 경우가 있습니다. Driver 클래스를 직접 캡슐화하여 사용하는 것이 좋습니다.

위의 폭언은 주제에서 약간 벗어났습니다. 직접적인 퍼지 쿼리 외에도 $in 또는 $nin과 함께 사용할 때는 특별한 주의가 필요합니다.

$query=array("name"=>new MongoRegex("/.*”.$name.".*/i"));
$db->find($query);
로그인 후 복사

위와 같이 필터를 작성하면 실행 중 치명적인 오류가 발생합니다.

$query = new \MongoDB\Driver\Query('_id' => ['$regex' => '^5101']);
$this->getManager()->executeQuery($this->dbname . $this->collection, $query);
로그인 후 복사
$in에 배열을 제공해야 한다고 하는데, 위의 $filter< /code>변경하고 이에 대한 배열을 가져옵니다.<span style="color: #ff0000"></span><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:php;toolbar:false">$filter = [&amp;#39;_id&amp;#39; =&gt; [&amp;#39;$in&amp;#39; =&gt; [&amp;#39;$regex&amp;#39; =&gt; &amp;#39;^5101&amp;#39;]]];</pre><div class="contentsignin">로그인 후 복사</div></div></strong>하지만 불행히도 여전히 원하는 결과를 성공적으로 얻을 수 없습니다.<br/></p><div class="code" style="position:relative; padding:0px; margin:0px;"><pre class="brush:plain;">PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: $in needs an array in filename</pre><div class="contentsignin">로그인 후 복사</div></div><p><code>$in이라고 나와 있습니다. $가 표시되지 않습니다. 어떻게 해야 하나요? 실제로 $in 또는 $nin에서 퍼지 일치를 사용하려면 MongoDBBSONRegex 클래스의 인스턴스를 사용해야 합니다. mongodb php library的类库来操作, 但是这个库里面有60多个文件,有时候比我项目文件还要多,这是闹哪样。这我建议自己去封装一个Driver类来使用。

上面吐槽吐的有点跑题了, 除了直接模糊查询, 在和$in$nin使用的时候, 需要特别注意下:

$filter = [&#39;_id&#39; => [&#39;$in&#39; => [[&#39;$regex&#39; => &#39;^5101&#39;]]];
로그인 후 복사

如果你像上面那么写filter的话, 执行的时候将抛出一个致命错误:

PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: cannot nest $ under $in in filename
로그인 후 복사

这里说$in里面需要提供一个数组, 那么我们把上面的$filter改下, 给它弄个数组过去:

$filter = [&#39;_id&#39; => [&#39;$in&#39; => [new \MongoDB\BSON\Regex(&#39;^5101&#39;,&#39;i&#39;)]]];
로그인 후 복사

但是不幸的是, 还是无法成功的得到想要的结果:

rrreee

这里说$in中不能出现$, 那咋办呢? 其实在$in$nin中要使用模糊匹配, 需要使用MongoDBBSONRegex
rrreee

드디어 이번에 원하는 결과를 얻었습니다.

관련 권장사항:

php는 MongoDB 자체 증가 ID의 사용자 정의 생성을 구현합니다.

MongoDB 뷰 실행 계획

MongoDB 인덱스 사용 방법

위 내용은 php7이 MongoDB 퍼지 쿼리를 구현하는 방법에 대한 자세한 설명의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿