CNode

mongodb 增删改 多维数组的问题

Jjackhutu发布于12 年前最后回复12 年前3 回复7660 浏览0 收藏

如上,这是mongodb 一个集合文档,存储的商品三级分类. 为了发挥mongodb的优势和查询方便,采用这种嵌入式。但是有些蛋疼的问题。 1:对里层数组做增删改的时候无法精确定位。如果再增加四级,五级。那更蛋疼。 2:如果结合商品表查询也不是很爽,每个商品有一个字段是商品分类名。比如:查询sport分类下的所有商品,那就要将sport分类下的数组一层一层循环得到所有分类。这样好像不是很爽。 那最后一个疑问:像这种商品分类和商品表,用mongodb数据库应该怎么样设计才是最后理的????有类似的例子看吗?求指教!

查看回复

回复 (3)

T
tulayang#1·12 年前
  1. 你这模型建立的,太臃肿了,重复太多,提取自然就麻烦。
  2. 内容应该尽可能扁平,四级五级太搞笑了,不要关联太多。

####假设商品分类三级A->B->C,应该建立1个集合

[{
    _id: xxx,
    cat_name : 'xxx',
    cat_desc : 'xxx',
    A: 1
},
{
    _id: xxx,
    cat_name : 'xxx',
    cat_desc : 'xxx',
    A: 1,
    B: 1
},
{
    _id: xxx,
    cat_name : 'xxx',
    cat_desc : 'xxx',
    A: 1,
    B: 1,
    C: 1
},
...]

需要1级,只需要检索拥有A:1 需要2级,只需要检索拥有B:1 需要3级,只需要检索拥有C:1

####或者建立2个集合

cat集合
[{
    _id: xxx,
    cat_name : 'xxx',
    cat_desc : 'xxx',
},
...]
level集合
[{
    _id: xxx,
    level: 1,      // 第1级
    cat_id: [xxx, xxx, xxx, ...] 
},
{
    _id: xxx,
    level: 2,    // 第2级
    cat_id: [xxx, xxx, xxx, ...] 
},
{
    _id: xxx,
    level: 3,    // 第3级
    cat_id: [xxx, xxx, xxx, ...] 
}]

需要哪个等级只需要检索level对应集合和cat集合, 添加新值要同步level和cat

T
tulayang#3·12 年前
引用 tulayang1. 你这模型建立的,太臃肿了,重复太多,提取自然就麻烦。 2. 内容应该尽可能扁平,四级五级太搞笑了,不要关联太多。 假设商品分类三级A B C,应该建立1个集合 需要1级,只需要检索拥有A...

@winky

假设分为如下4级:

食品 - 面食 - 面包 - 红色
食品 - 面食 - 包子 - 圆的
食品 - 水果 - 苹果 - 小的
汽车 - 跑车 - AAA - 贵的
汽车 - 电车 - BBB - 便宜的
厨具 - 勺子 - MMM - 圆的

可以将其对应为:
A - B - C - D

建立集合如下:

{
    _id: xxx,
    cat_name : 'xxx',
    cat_desc : 'xxx',
    A : '食品'
    B : '面食',
    C : '面包',
    D : '红色'
},
{
    _id: xxx,
    cat_name : 'xxx',
    cat_desc : 'xxx',
    A : '汽车'
    B : '跑车',
    C : 'AAA',
    D : '贵的'
},
...

查找食品下面的直接分类: 查找A=食品, 在结果中获取其中B的值

查找面包的分类: 查找C=面包, 在结果中获取其中D的值

参与回复
登录后即可参与回复。登录