ホームページ  >  記事  >  バックエンド開発  >  php7 が MongoDB ファジークエリを実装する方法の詳細な説明

php7 が MongoDB ファジークエリを実装する方法の詳細な説明

*文
*文オリジナル
2018-01-03 11:26:402839ブラウズ

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 library クラス ライブラリが操作用に提供されていますが、このライブラリには 60 以上のファイルがあり、場合によっては私のプロジェクト ファイルよりも多くなります。 Driver クラスを自分でカプセル化して使用することをお勧めします。

上記の暴言は少し話題から外れていますが、直接のファジー クエリに加えて、それを $in または $nin で使用する場合には特別な注意を払う必要があります。

$query=array("name"=>new MongoRegex("/.*”.$name.".*/i"));
$db->find($query);
If 上記のようにフィルターを記述すると、実行中に致命的なエラーがスローされます:

$query = new \MongoDB\Driver\Query('_id' => ['$regex' => '^5101']);
$this->getManager()->executeQuery($this->dbname . $this->collection, $query);

$in に配列を指定する必要があるとのことなので、上記の を記述します。 >$filterそれを変更して配列を取得します:<strong><span style="color: #ff0000"><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></span>しかし、残念ながら、まだ望ましい結果を正常に取得できません:</strong><br><pre class="brush:plain;">PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: $in needs an array in filename</pre>

$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中要使用模糊匹配, 需要使用MongoDBBSONRegexrrreee
ようやく今回は望み通りの結果が得られました。

関連する推奨事項:

phpは、自己増加IDのMongodbカスタム生成を実装します

MongoDBビューの実行計画

MongoDBインデックスの使用方法

以上がphp7 が MongoDB ファジークエリを実装する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。