1

ユーザーと教師が関わるシステムを構築しています。この特定のシステムでは、教師を分類したいと思いますが、注意が必要なのは、カテゴリが動的であるため、いつでも変更できることです。

バックエンドを開発しているので、いくつかの機能が必要です。

  • 1つ目はshowAllCategories()で、すべての主要なカテゴリが表示されます。
  • 2番目は、 category()のサブカテゴリを表示するshowSubcategories()です。
  • 3番目はshowContent()で、この場合は教師の情報を表示します。

強力なStack-Overflowersにこれを効率的に実装する方法を尋ねる前に、二重リンクリストアプローチを使用できると思いました。カテゴリテーブルCategoryNameBeforeAfterContentで、カテゴリにafterがない場合、コンテンツは先生のテーブル。これは私の古典的なSQLアプローチですが、MongoDBを使用しています。初心者なので、この特定の状況でNoSQLを利用できるかどうか疑問に思います。

4

1 に答える 1

1

MongoDbは、実際にはリストのように動作する配列型をネイティブにサポートします。$pushを使用$pullすると、このような配列フィールドに要素を追加したり、要素を削除したりできます。$addToSet重複がないことを確認します。

次に、カテゴリがどのように保存されるかが問題になります。メインカテゴリを使用してコレクションcategoriesを作成できます。コレクションには、サブカテゴリの配列を持つ各フィールドがあります。

{"_id": "science", "sub": ["chemist", "physicist", "biology"]}
{"_id": "languages", "sub": ["english", "german", "spanish"]}

一方teacher、コレクションには、教師のカテゴリである一連の埋め込みドキュメントが含まれます。これらは、categoriesコレクションで見つかったものの複製ですが、教師ビューで必要のないフィールドは含まれていません。この方法では、結合はMongoDBに存在しないため、結合を回避できます。

{
 "_id": ObjectId(...),
 "name": {"first": "Foo", "last": "Bar"},
 "categories": ["chemist", "biology"]
}

残りはあなたが考えることができると確信しています。

追加:要するに、MongoDBが提供する柔軟なタイプを使用し、データの冗長性について心配する必要はありません。ドキュメントを頻繁に埋め込み、インデックスを忘れないでください。

于 2012-11-05T09:17:21.890 に答える