0

MongoDB ドキュメントの設計に頭を悩ませ、何かを行う方法や間違ったツリーを吠えているかどうかを理解しようとしています。

ミニ CMS を作成しています。サイトには、カテゴリ別にグループ化されたドキュメントまたは URL が含まれます。つまり、別のサイトの商品へのリンクのリストを持つ「ショップ」というグループと、芸術作品のリストを持つ「アート」というカテゴリがあります。 、それぞれにスライドショーのタイトル、概要、および画像があります。

したがって、これを行う 1 つの可能な方法は、次のようなコレクションを持つことです。

[{category: 'Products',
  title: 'Thong',
  href: 'http://www.thongs.com'
},{
  category: 'Products',
  title: 'Incredible Sulk',
  href:'http://www.sulk.com'
},{
  category: 'Art',
  title: 'Cool art',
  summary: 'This is a summary to display',
  images: [...]
}]

しかし、ここで質問があります.... ウェブページを作成しているとき、この構造はあまり役に立ちません。ホームページには、カテゴリごとにグループ化された「もの」のリスト、リスト...メニュー..などがあります。それを簡単に行うには、次のようなものが必要です。

[
 {'Products':[
      {title:'thong', href:'http://www.thongs.com'},
      {title:'Incredible Sulk'}
  ]
 },
 {'Art':[
      {title:'Cool art',summary:'This is a summary to display',images:[...]}
  ]
 }
]

問題は、どうにかして MondoDB でこの変換を行うことができるかということです。できない場合、アプリ サーバー レイヤーでこれを行うのは悪いことですか (一意のカテゴリのグループ化されたリストを取得し、Mongo にそのカテゴリのドキュメントを照会してループします)。運が良ければ、すべてのmongodbがメモリ内にあるので、アプリサーバーレイヤーが悪いと思います。これらのどちらも良くない場合、私はそれをすべて間違っていますか?そもそもこのような構造を実際に保存する必要がありますか?

ユーザーがその場でカテゴリを簡単に作成できるようにし、大量のドキュメントを追加し始めたらどうなるかを検討する必要があります。カテゴリごとに取得するドキュメントの数を制限するか、返されるフィールドを何らかの方法で制限する必要があります。 mongodb にクエリを実行すると、遅くて無駄な比較的大きなデータのチャンクが返されませんが、目的のページを作成するために必要な最小限のデータが返されます。

4

1 に答える 1

0

私は、私が望むほとんどの構造を提供するグループクエリを考え出しましたが、テンプレートに使用するのに十分です.

db.things.group({
    key:{category:true},
    initial:{articles:[]},
    reduce: function(doc, aggregator) {
        aggregator.articles.push(doc);
    }
})
于 2013-03-08T21:00:36.677 に答える