0

親レコードが返されたら、getDBRef() を実行しなくても、find() を実行して Mongo に関連する参照を自動的に返す方法があるかどうか疑問に思っていました。

PHPドキュメントのどこにも表示されません。getDBRef を使用して簡単にサポートできますが、それほど効率的ではないようです。

また...リンクされた参照で返す特定のデータを選択する方法がないことに驚いています。戻り値を制御できるように、別の手動の find ステートメントを実行することもできますが、これを行うに、よりパフォーマンス指向の方法が必要です。

おそらく、メソッドを変更して、find に PHP ライブラリ クラスを使用する代わりに、独自の JavaScript コマンドを生成し、MongoCode クラスを使用して実行する必要がありますか? それはうまくいくでしょうか。頭をかいた後、Google に向かう

ありがとう!

4

2 に答える 2

3

MongoDBは結合をサポートしていません。 データベース参照(DBRefs)_idは、別のドキュメントを参照するフィールドを格納する方法を指します。現在、これに対する特定のサーバー側のサポートはありません。ドキュメントへの参照をハイドレイトするには、別のクエリが必要です。一部のMongoDBドライバーには便利なメソッドがあるため、手動で検索を行う必要はありません。find()ルックアップするDBRefを指定して独自に実行する(または他の基準を使用して関連ドキュメントを検索する)場合も、同様に有効/パフォーマンスが高くなります。

ユースケースとデータモデリングによっては、DBRefリンクのより効率的な代替手段として、関連データをサブドキュメントとして埋め込むことができます。その他の例については、スキーマ設計に関するMongoDBwiki情報を参照してください。

パフォーマンスに関しては、 MongoCode(サーバーで評価する必要があるJavaScript)よりもPHPクエリを使用する方が適切です。MongoCodeは、実際にはMap/Reduce関数内などのより限定的な使用を目的としています。このアプローチの潜在的な制限のいくつかについては、サーバー側のコード実行を参照してください。

于 2012-07-15T21:05:24.203 に答える
0

参照: http://docs.mongodb.org/manual/reference/database-references/

あるドキュメントの _id フィールドを別のドキュメントに参照として保存する手動参照。次に、アプリケーションで 2 番目のクエリを実行して、関連データを返すことができます。これらのリファレンスはシンプルで、ほとんどのユース ケースで十分です。

DBRefは、最初のドキュメントの _id フィールドの値、コレクション名、およびオプションでそのデータベース名を使用した、あるドキュメントから別のドキュメントへの参照です。これらの名前を含めることにより、DBRef は、複数のコレクションにあるドキュメントを単一のコレクションのドキュメントとより簡単にリンクできるようにします。

DBRef を解決するには、アプリケーションで追加のクエリを実行して、参照されているドキュメントを返す必要があります。多くのドライバーには、DBRef のクエリを自動的に形成するヘルパー メソッドがあります。ドライバーは、DBRef をドキュメントに自動的に解決しません。

いずれにせよ、使用している参照の種類に関係なく、逆参照を自分で行う必要があります。

それが役に立てば幸い!

于 2015-07-15T09:24:24.523 に答える