uni-app JQL中的groupBy 不能分组返回数据 只能分组统计数据返回
uni-app JQL中的groupBy 不能分组返回数据 只能分组统计数据返回
操作步骤:
const order = db.collection(‘Delivery_order’).field(‘customer_id,route_id,order_staus,order_remarks,complete_date’).getTemp() const route = db.collection(‘Delivery_route’).field(’_id,name’).getTemp() const customer = db.collection(‘Delivery_customer’).field(’_id,name’).getTemp()
db.collection(order,route,customer).groupBy(‘order_staus’).groupField(‘complete_date’).get()
### 预期结果:
const order = db.collection('Delivery_order').field('customer_id,route_id,order_status,order_remarks,complete_date').getTemp()
const route = db.collection('Delivery_route').field('_id,name').getTemp()
const customer = db.collection('Delivery_customer').field('_id,name').getTemp()
db.collection(order,route,customer).groupBy('order_status').get()
实际结果:
groupBy 与 groupField 必须搭配使用
### bug描述:
JQL中的groupBy 不能分组返回数据 只能分组统计数据返回
在 UniApp 的 JQL(JSON Query Language)中,groupBy
确实主要用于对数据进行分组统计,而不是直接返回分组后的原始数据。groupBy
的目的是将数据按照指定的字段进行分组,并对每个分组进行聚合操作(如计数、求和、平均值等),然后返回聚合后的结果。
如果你想要返回分组后的原始数据,而不是统计数据,可以考虑以下几种方法:
1. 使用 aggregate
和 groupBy
进行分组统计
如果你需要统计数据,可以使用 aggregate
和 groupBy
结合来实现。例如:
const res = await db.collection('orders')
.groupBy('product_id')
.groupField('sum(quantity) as total_quantity')
.get()
这个查询会按照 product_id
分组,并返回每个分组的 quantity
总和。
2. 使用 distinct
获取唯一值
如果你只是想获取某个字段的唯一值,可以使用 distinct
:
const res = await db.collection('orders')
.field('product_id')
.distinct()
.get()
这个查询会返回 product_id
字段的唯一值列表。
3. 手动分组
如果你需要返回分组后的原始数据,可以在获取数据后,在客户端手动进行分组。例如:
const res = await db.collection('orders').get()
const groupedData = res.data.reduce((acc, item) => {
const key = item.product_id
if (!acc[key]) {
acc[key] = []
}
acc[key].push(item)
return acc
}, {})
这个代码会将 orders
表中的数据按照 product_id
进行分组,并返回一个对象,其中键是 product_id
,值是对应的数据数组。
4. 使用 aggregate
和 groupBy
结合 push
操作
在某些情况下,你可以使用 aggregate
和 groupBy
结合 push
操作来返回分组后的原始数据。例如:
const res = await db.collection('orders')
.groupBy('product_id')
.groupField('push($) as items')
.get()