定義コレクション (つまり、どのカテゴリとサブカテゴリが存在するかを説明するコレクション) は、次のように構成する必要があります。
db.categories {
_id: <Category ID, unique code or ObjectId>,
name : <Human readable category name>,
subCategories : [
{
subCategoryCode : <Sub category ID, local unique code>,
name : <Human readable sub category name>,
<additional sub category data>
}
],
<additional category data>
}
そしてあなたのアイテム:
db.items {
_id : <Item id>
name : <Human readable item name>
category : {
categoryId : <Category ID>,
categoryName : <Human readable category name>,
subCategoryId : <Sub category ID>,
subCategoryName : <Human readable sub category name>,
},
<additional item data>
}
このスキーマをすべての一般的なユース ケースで実行すると、1 つの一般的な操作で両方のコレクションをクエリする必要がある状況はほとんどないことがわかります。データの重複は意図的なものであり、管理する必要があります (つまり、カテゴリ名を更新する場合、特定のカテゴリのアイテムを一括更新する必要があります)。パフォーマンスや実用性の理由でそれを受け入れることができない場合は、名前のみを保存し、アプリケーションでアプリのローカル ID-> 名前キャッシュを維持して、データベースにクエリを実行せずにカテゴリの検索を容易にすることができます。
質問?コメント