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

*文
リリース: 2023-03-19 07:08:01
オリジナル
2644 人が閲覧しました

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< /code>それを変更して配列を取得します:

$filter = ['_id' => ['$in' => ['$regex' => '^5101']]];
ログイン後にコピー
しかし、残念ながら、まだ望ましい結果を正常に取得できません:
PHP Fatal error: Uncaught MongoDB\Driver\Exception\ConnectionException: $in needs an array in filename
ログイン後にコピー

$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')]]];
ログイン後にコピー

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

rrreee

这里说$in中不能出现$, 那咋办呢? 其实在$in$nin中要使用模糊匹配, 需要使用MongoDBBSONRegexrrreee
ようやく今回は望み通りの結果が得られました。

関連する推奨事項:

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

MongoDBビューの実行計画

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

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

関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!