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 = [&#39;_id&#39; => [&#39;$in&#39; => [&#39;$regex&#39; => &#39;^5101&#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 = ['_id' => ['$in' => [['$regex' => '^5101']]];
如果你像上面那么写filter的话, 执行的时候将抛出一个致命错误:
PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: cannot nest $ under $in in filename
这里说$in
里面需要提供一个数组, 那么我们把上面的$filter
改下, 给它弄个数组过去:
$filter = ['_id' => ['$in' => [new \MongoDB\BSON\Regex('^5101','i')]]];
但是不幸的是, 还是无法成功的得到想要的结果:
这里说$in
中不能出现$, 那咋办呢? 其实在$in
或$nin
中要使用模糊匹配, 需要使用MongoDBBSONRegex
rrreee
ようやく今回は望み通りの結果が得られました。
phpは、自己増加IDのMongodbカスタム生成を実装します
以上がphp7 が MongoDB ファジークエリを実装する方法の詳細な説明の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。