【发布时间】:2015-01-09 09:32:01
【问题描述】:
我正在使用 MongoDB,我想获取数据以多次显示带有类型和子类型的菜单,如果我访问一个子类型,系统会显示该子类型的产品。
示例 1 对我来说更好,因为每种类型只有一个集合,但如果我不访问任何子类型,我也会加载所有产品。好的,我知道,我可以使用投影,但是是否可以在查询中使用投影?我可以只投影一个子类型的产品吗?因此,在这种情况下,示例 2 可能是正确的方法,但我有两个集合和更多关系。
您认为最好的解决方案是什么?
示例 1
集合类型:
{
"_id" : ObjectId("53fae88aafb3dc3494e03225"),
"name" : "TypeProduct",
"subtypes" : [
{
"name" : "Subtype1",
"products" : [
{
"$ref" : "products",
"$id" : ObjectId("53fee4fcafb358a62d7684c3"),
"sku" : "0001",
"picture" : "http...jpg"
},
{
"$ref" : "products",
"$id" : ObjectId("53fee656afb358a62d7684c4"),
"sku" : "0002",
"picture" : "http...jpg"
}
]
},
{
"name" : "Subtype2",
"products" : [
{
"$ref" : "products",
"$id" : ObjectId("53fee4fcafb358a62d7684c3"),
"sku" : "0001",
"picture" : "http...jpg"
},
{
"$ref" : "products",
"$id" : ObjectId("53fee656afb358a62d7684c4"),
"sku" : "0003",
"picture" : "http...jpg"
}
]
}
]
}
示例 2
集合类型
{
"_id" : ObjectId("53fae88aafb3dc3494e03225"),
"name" : "TypeProduct",
"subtypes" : [
{
"$ref" : "subtypes",
"$id" : ObjectId("53fee4fcafb358a62d7684c3"),
"name" : "Subtype1"
},
{
"$ref" : "subtypes",
"$id" : ObjectId("53fee4fcafb358a62d7684c3"),
"name" : "Subtype2"
}
]
}
集合子类型
{
"_id" : ObjectId("53fee4fcafb358a62d7684c3"),
"name" : "Subtype1",
"products" : [
{
"$ref" : "products",
"$id" : ObjectId("53fee4fcafb358a62d7684c3"),
"sku" : "0001",
"picture" : "http...jpg"
},
{
"$ref" : "products",
"$id" : ObjectId("53fee656afb358a62d7684c4"),
"sku" : "0002",
"picture" : "http...jpg"
}
]
}
【问题讨论】:
-
不允许使用前缀为
$的字段,因为它是 MongoDB 中用于其他用途的保留字符。 -
是的,它是 Morphia 生成的代码,不是我的。
标签: mongodb collections architecture