ただし、あなたの質問には欠けているものがかなりあります。
私が作成しようとしているのは、特定の地域の果樹のリストです。また、その地域で栽培できる果樹のリストも必要です。
地理空間クエリのようなにおいがします: http://docs.mongodb.org/manual/core/geospatial-indexes/。
したがって、ユーザーには場所があります。
{
name: 'sammaye',
location: [107,206]
}
そして、成長する各ツリーは、一連の領域を利用できます。
{
name: 'apple tree'
locations_of_growth: [[74,59],[67,-45]]
}
そして、地球の距離 ( http://docs.mongodb.org/manual/core/geospatial-indexes/#distance-calculation$near
) に相当するユーザーに対してクエリを実行して、そのユーザーの近くに存在する木を計算するだけです。
地理空間クエリに関する問題は、さらに詳しい情報で制約できることです。そのため、ユーザーがその地域のリンゴの木の葉の色を比較して、その地域で緑の葉を持っているリンゴの木がいくつあるかを調べられるようにしたいとします。それをツリードキュメント内の条件として追加し、$near
.
地理空間クエリには欠点が 1 つあります。それは、コレクションごとに 1 つのインデックスしか持てないことです ( http://docs.mongodb.org/manual/core/geospatial-indexes/#create-a-geospatial-index )。は、その地域に植えることができる木のリストも提供したい場合、 という名前のコレクションと という名前の 2 つのコレクションが必要になる可能性があることを意味しother_trees
ますgrowable_species
。ユーザーがクエリを実行した領域内で自分の木を他のツリーと比較できるようにしたい場合、およびクエリを実行other_trees
した領域内で成長できる木をユーザーが表示できるようにしたい場合は、クエリを実行できますgrowable_trees
。
もちろん、これはこれを行うための 1 つの方法にすぎません。
編集
私は Doctrine の使用を「推奨」しません。それはあなた次第であり、シナリオによって異なります。Doctrine は非常に重く、驚くほど遅い ORM であり、PHP 用の高速で軽量な ORM がたくさんあります: http://docs.mongodb.org/ecosystem/drivers/php-libraries/ ORM とは、フル スタック フレームワークを使用している場合や、ドライバーを単独で使用したい場合です。
また、MongoDB では、JSON PHP (それが何であれ) の処理に関する知識は必要ありません。MongoDB からのすべての結果は BSON としてドライバーに入り、PHP 内の標準の辞書、つまり連想配列に逆シリアル化されます。ここでは、JSON PHP 処理の知識は必要ありません。
また、他の回答とは異なり、「すべての情報を単一の JSON ドキュメントに保存する」ことに非常に注意してください。つまり、MongoDB は JSON ではなく BSON であるため、埋め込みは非常に慎重に検討する必要があり、シナリオに適合するかどうかを判断する必要があるためです。 . 実際、ほとんどの場合、s 以外のものを他の行に埋め込む_id
と問題が発生する可能性がありますが、前述したように、それはシナリオに依存します。