1

このデータをモデル化するための最良の方法を探しています。法則のコレクションがあります。各記事には 0 段落 (段落が明示的に番号付けされていないことを意味します) またはそれ以上 (最大 5) を含めることができます。

var lawSchema = new Schema({
name:{type:String,required:true},
chapter:{type:String},
paragraph:[{type:Numer}]
});

var documentSchema = = new Schema({
    name:{type:String,required:true},
    article_ref:[{item:{type: ObjectId, ref: 'article'},comment:String}]
    });

ドキュメントは記事または特定の段落のみを参照できるため、この現在のスキーマは間違っています。法律または法律段落の 2 つの方法でドキュメント コレクションをクエリできる必要があります。

  • 最初のケースでは、その法律 X (またはその段落) を参照するすべての文書を取得したいと考えています。
  • 2番目のケースでは、その法律の段落を参照しているドキュメントのみが明らかに必要です(他の段落は無視します)

最初の非常に単純な解決策は、この階層データを「法律」コレクションに「平面化」し、法律と段落ごとに異なる文書を作成することです。

var lawSchema = new Schema({
name:{type:String,required:true},
});

コレクションは次のようになります。

[
{_id:000,name:"article1"},
{_id:001,name:"article1 - paragraph 1"},
{_id:002,name:"article1 - paragraph 2"},
{_id:003,name:"article2"}
...
]

記事ごとのクエリを実行するには、ビジネス層で一種の大きな余分な作業が必要になるため、これは好きではありません (前述のように、「記事 1」だけでなく「記事 1 - 段落 1」も参照するドキュメントが必要です)。

編集:私はこの質問を見つけまし たフォルダー>サブフォルダー>ファイルのような階層データのMongooseスキーマ しかし、私が言ったようにパスを使用して参照を簡単に取得できるかどうかはわかりません(章とそのすべての段落または単一の段落への参照)

4

0 に答える 0