2

MongoDB と MongooseJS は初めてです。データベースの作成も下手です。申し訳ありません。

最初の質問

サブドキュメントと人口の違いは何ですか? docs exampleを見ると、Parent-Children サブドキュメントは Person-Stories 母集団に非常に似ているようです。

データベース スキーマに関する質問

シナリオ: ユーザーは多数の Canvas を作成できます。各 Canvas は、多数の Shape をホストできます。各シェイプは、シンプルまたはコンプレックスの 2 つのタイプにすることができます。シンプルな形状は、正方形または円 (オブジェクト) です。複雑な形状は、フレームとマテリアルで構成されています。

            Canvas
               |
             Shape
            /     \       
      Simple       Complex: Frame, Material 
      /     \
Square       Circle

現在、形状は 1 つのキャンバスにのみ割り当てることができますが、キャンバス間で移動したり、キャンバスの外に単独で配置したりできます。フレームとマテリアルは独立して作成し (単独でライブ)、複雑なシェイプに追加できます (各複雑なシェイプは 1 つのフレームと 1 つのマテリアルのみを持つことができます)。

実装しなければならないクエリのいくつかは、特定の Canvas 内のすべての形状、特定のマテリアルを使用しているすべての形状、または形状によって使用されているすべてのフレームを要求するものです。

サブドキュメントと人口の違いは私には明確ではないので、どのように始めればよいかさえわかりません...助けや例をいただければ幸いです(完全で機能するデータベーススキーマは期待していません)。

4

1 に答える 1

1

パート 1 の答えとして、相違点は、Document-Subdocument シナリオでは、サブドキュメントがドキュメントと共に格納されることです (子ドキュメントとして、ドット表記を使用してアクセスできます)。

Mongoose の入力シナリオでは、別のコレクション内のドキュメントへの参照が保持されます。mongoose に入力するように指示すると、MongoDB に対して別のクエリを実行して、この「サブドキュメント」を取得します。

私が見る主な違いは、マングースのpopulateメソッドでは、「サブドキュメント」プロパティを使用してドキュメントをクエリできないのに対し、埋め込みサブドキュメントモデルではできることです。


編集、サブドキュメントの例

したがって、MongoDB では、次のようにネストされたサブドキュメントとしてデータを保存できます。

{
    _id: acbdbd,
    "property": "value",
    "subdocumentproperty" : {
        "param1": 1,
        "param2": 2
    }
}

このデータはマスター ドキュメントにのみ保存され、クエリはマスター ドキュメントを介して行われます。

db.collection.find({"subdocumentproperty.param1": 1})
于 2013-08-12T09:32:07.817 に答える