web-dev-qa-db-ja.com

MongoDBで関係を構造化する合理的な方法は何ですか

私もNode-私が最もよく知らない-記事/本/チュートリアルがこれに関連している場合-それはさらに役立つだろう)も使用しています。

私は主にMySQLのバックグラウンドを持っています-このAPIでは、すべてのデータがJSONとして提供されるため、一見すると、Mongoを使用することは非常に理にかなっています(私は間違っている可能性があります)。私が頭を包むことができなかった1つの重要な点は、リレーショナルモデルです。 e.b. _Object has many Assets_。

ほとんどの人が精通しているいくつかの例を使用するために、私が次のようなことをしようとしていると仮定しましょう:

  • ブログ投稿とそのすべてのコメントを選択します。 または
  • フォトギャラリーとそのすべての写真を選択します

次のように、コールバックをアセット内に保存するのと同じくらい簡単ですか?:

_Photo {
    __id: 5,
    content: '...',
    gallery_id: 9 
}
_

そして、.find({ gallery_id: 9 })

私はこれがうまくいくことを知っていますが、それがベストプラクティスですか?私はvery Document Databasesの新人であり、この特定のトピックについてはあまり見ていません。

5
drewwyatt

偶然にも、私はNodeとMongoDBを使用して新しいアプリケーションを検討しています。

私は過去にMongoDBを軽く使用しており、 MongoDBドキュメントデータモデリング が優れた出発点であることがわかりました。親に子を直接埋め込むのではなく、参照を利用することを選択した場合、説明する方法、参照を親に保存し、2番目の検索を使用して参照項目を取得する方法は、それを行うのに最適な方法です。オブジェクト。

ただし、これを行うにはいくつかのより良い方法があるかもしれません。 Mongoose をObject Document Mapper(ODM)として使用することを検討してきました。これは、Node ドキュメント で公式にサポートされているODMです。

populateを使用した疑似結合など、アプリケーション内でかなり複雑なモデルを構築している場合は特に、いくつかの便利な機能を提供します 関数。母集団機能は、参照を管理するためのより構造化されたアプローチを提供し、親と子の検索を1つのステップで可能にします。

4
DemetriKots

MongoDB モデルの関係参照 を使用。

データを正規化するには、2つのドキュメント間の参照を保存して、各ドキュメントで表されるデータ間の関係を示します。

一般に、正規化されたデータモデルを使用します。

  • 埋め込むとデータの重複が発生しますが、重複の影響を上回るほどの十分な読み取りパフォーマンスの利点は提供されません。
  • より複雑な多対多の関係を表す。
  • 大きな階層データセットをモデル化する。
6
Robert Harvey