gpt4 book ai didi

node.js - 从 rethinkdb 获取多个平均值和计数的最有效方法

转载 作者:太空宇宙 更新时间:2023-11-04 02:06:34 25 4
gpt4 key购买 nike

我正在创建一个 Web 应用程序,它从表单收集信息,将它们(例如年龄、高度和体重)插入到 rethinkdb 中。数据库,然后通过 socket.io 显示简单的描述性统计数据.

目前,我正在使用r.expr()运行多个查询,例如

r.expr({
mean1: r.db(…).table(…).avg(…),
mean2: r.db(…).table(…).group(…).avg(…).mul(10).round().div(10).ungroup(),
count: r.db(…).table(…).count()
}).run(conn, (err, res) => {
...

构造一个包含我感兴趣的计数和平均值的对象,然后使用 io.emit()将它们发送到客户端进行显示,每次添加新条目时都会更新。

这对我来说看起来不太有效,我猜有一种更好的方法可以做到这一点 - 也许只需一个查询 - 但我对 ReQL 非常缺乏经验。以及一般的查询语言。

此外,是否有比我上面所做的更好的方法在分组后以任意精度进行舍入或更复杂的数值运算?

最佳答案

要一次执行多个归约,您可以手动将它们拆分为单独的 mapreduce 操作。像这样的东西:

r.table(...).map(
row => ({
count: 1,
sum: row('a'),
groups: r.object(row('group'), {count: 1, sum: r.row('a')})
})
).reduce(
(left, right) => ({
count: left('count').add(right('count')),
sum: left('sum').add(right('sum')),
groups: left.keys().setUnion(right.keys()).map(
key => [key, {
count: left(key)('count').default(0).add(right(key)('count').default(0)),
sum: left(key)('sum').default(0).add(right(key)('sum').default(0))
}]
).coerceTo('object')
})
).do(
res => ({
count: res('count'),
mean1: res('sum').div(res('count')),
mean2: res('groups').coerceTo('array').map(
pair => [pair(0), pair(1).do(x => x('sum').div(x('count')).mul(10).round().div(10)]
}).coerceTo('object')
)

它可能不会更有效,但可以进一步优化。

您可以执行more complex mathematical operations使用r.js

关于node.js - 从 rethinkdb 获取多个平均值和计数的最有效方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44058687/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com