我已经宣布了一个存储客户数据的数据库:
type Customer =
{
name : string
email: string
cp: int
}
db /customer : Customer
我想执行某些查询来处理数据,例如:
Select name where id > <number>
Select * where cp IN(<number>, <number>)
Select * order by name
可以执行一个返回Array,Map或类似函数的函数来迭代它吗? 如何迭代这样的结果?
谢谢!
答案 0 :(得分:1)
好的,从您的db
声明开始宣布单客户,而不是客户的集合,这是您想要做的,我相信。我建议将其声明为从客户编号到客户数据的地图:
db /customer : intmap(Customer)
现在使用customers = /customer
,您可以获得完整的客户集合并对其进行任意处理。或者,Db.intmap_fold_range
为您提供来自集合的一系列键的折叠功能;有了它,您可以轻松地将您的第一个查询编码为:
names_with_ids_gt(x) =
get_names(names, id) = [/customer[id]/name | names]
Db.intmap_fold_range(@/customer, get_names, [], x, none, (_ -> true))
当然,完全收集客户并对其进行一些处理将不会非常有效。要获得更高效的解决方案,您需要使用外部数据库及其查询功能。 Opa对这些人的支持即将到来:http://blog.opalang.org/2011/11/opas-database-and-where-its-heading.html。