【问题标题】:Arangodb groupby query multiple fieldsArangodb groupby 查询多个字段
【发布时间】:2020-02-15 16:41:45
【问题描述】:

我在 arangodb 集合中有一个产品数据库,其中一个产品有多种尺寸。问题是对于每个尺寸,重复相同的产品。但是每个产品都有一个共同的组号。像这样:

{"name": "product1", "description": "someDescription", size: 5,price: 12 groupNumber: 12}
{"name": "product1", "description": "someDescription", size: 15, price: 26, groupNumber: 12}
{"name": "product1", "description": "someDescription", size: 25, price: 84, groupNumber: 12}
{"name": "product1", "description": "someDescription", size: 35, price: 106, groupNumber: 12}

{"name": "product2", "description": "someDescription", size: 5, price: 12, groupNumber: 11}
{"name": "product2", "description": "someDescription", size: 15, price: 22, groupNumber: 11}
{"name": "product2", "description": "someDescription", size: 25, price: 32, groupNumber: 11}
{"name": "product2", "description": "someDescription", size: 35, price: 43, groupNumber: 11}

我现在必须显示产品列表(在网页中),但每个产品应该只出现一次,每个产品的尺寸和价格都在一个数组中,如下所示:

product1 someDescription sizes: 5,15,25,35, prices: 12,26,84,106
product2 someDescription sizes: 5,15,25,35, prices: 12,22,32,43
...

我该怎么做?

【问题讨论】:

  • 鉴于您的声誉,您应该知道在这个社区中会发生某种互动。我的回答有帮助吗?我错了吗?如果没有您的确认,此问答对其他访问者来说几乎毫无价值。
  • @TomRegner 我不知道你的回答是对还是错。不过看起来是正确的。我以不同的方式做到了,我会在一段时间内将其作为答案。同时享受投票:)
  • 这不是我感兴趣的赞成票,请随时撤回。 aql/arango 在 SO 上不是一个非常活跃的子组,Q/As 的质量对我来说更重要——如果我花时间设置一个测试用例并尝试解决问题,我有点感激回馈时间以增强我们共同努力的有效性。

标签: arangodb aql


【解决方案1】:

忽略groupNumber 并按name 分组,查询如下所示:

FOR p IN products
  COLLECT description = p.description, name = p.name INTO groups
  RETURN { 
    "name" : name, 
    "description": description,
    "prices" : groups[*].p.price,
    "sizes" : groups[*].p.size
  }

根据您的(更正后的)示例数据,查询返回:

[
  {
    "name": "product1",
    "description": "someDescription",
    "prices": [
      12,
      84,
      106,
      26
    ],
    "sizes": [
      5,
      25,
      35,
      15
    ]
  },
  {
    "name": "product2",
    "description": "someDescription",
    "prices": [
      43,
      32,
      22,
      12
    ],
    "sizes": [
      35,
      25,
      15,
      5
    ]
  }
]

分组的值没有排序,但尺寸和价格的位置是对应的,您可以缓解这一事实,将值压缩到尺寸-价格映射中:

FOR p IN products
  COLLECT description = p.description, name = p.name INTO groups
  RETURN { 
    "name" : name, 
    "description": description,
    "size_price_map" : ZIP(groups[*].p.size, groups[*].p.price)
  }

屈服:

[
  {
    "name": "product1",
    "description": "someDescription",
    "size_price_map": {
      "5": 12,
      "15": 26,
      "25": 84,
      "35": 106
    }
  },
  {
    "name": "product2",
    "description": "someDescription",
    "size_price_map": {
      "5": 12,
      "15": 22,
      "25": 32,
      "35": 43
    }
  }
]

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多