非专业键盘侠
非专业键盘侠
  • 发布:2022-04-28 04:26
  • 更新:2022-04-28 15:14
  • 阅读:326

求助,tree型二维数组该如何查询

分类:uniCloud

场景描述

一个商品同时属于多个分类,分类是无限极分类,在后台编辑的时候,为了数据更好的回显,需要把多个分类的完整路径存下来,结合数据库的getTree方法,很容易做到了商品的分类管理。

举栗

如附件所示,如果商品【A】同时属于电吉他和木吉他,在数据库中存储的形式是这样的:

商品的分类字段  
cates:[  
      [1,1-1,1-1-1],  
      [1,1-1,1-1-2]  
]

求助内容

在前台检索的时候,客户端传回来一个分类id,比如(叶子节点) 1-1-1,再比如(非叶子节点)1-1,怎么才能把这个商品【A】检索出来呢?
db,jql语法都行,非常感谢

2022-04-28 04:26 负责人:无 分享
已邀请:
呆狗的一生

呆狗的一生 - 呆狗的一生

不会哎

呆狗的一生

呆狗的一生 - 呆狗的一生

呼叫小枫叶

DCloud_uniCloud_WYQ

DCloud_uniCloud_WYQ

能查询但是性能不好,你这个分类方式存成一维数组不就行了吗?

  • 非专业键盘侠 (作者)

    目前的解决方式找到两种:

    1、原有分类字段是category_paths,存贮的是多个分类的完整路径,二维数组;在这个基础上再增加一个category_ids字段,一维数组,就是通过category_paths拉平去重之后的,这样就能回显和查询两不误了

    2、看了下jql的数据库运算方法,不用额外新增category_ids这个字段:


    const docId = '626418752a9fda000170727e'  
    db.collection('ggm-goods-spu').where(`'size(filter(category_paths,"path",in("${docId}","$$path"))) > 0'`).get()

    这样也能查询到,就是不知道写的对不对,是否也性能不好

    2022-04-28 15:34

  • DCloud_uniCloud_WYQ

    回复 非专业键盘侠: 我说的性能不好就是指查询无法使用索引优化,你写的这个就属于无法使用索引的那种

    2022-04-28 19:31

  • 非专业键盘侠 (作者)

    回复 DCloud_uniCloud_WYQ: 了然,谢谢

    2022-04-29 12:05

该问题目前已经被锁定, 无法添加新回复