http://docs.ckan.org/en/ckan-2.2/datastore.html处的数据存储区API文档介绍了“datastore_delete”或“datastore_search”等方法如何包含“过滤器”参数来过滤结果。
filters(字典) - 删除前应用的过滤器(例如{“name”: “弗雷德”})。如果缺少删除整个表和所有相关视图。 (可选)
考虑到{"name": "fred"}
示例,似乎过滤基于完全匹配。但是,是否也可以指定范围,例如得到的结果大于/小于给定值?
例如,如果我有一个名为“date”的字段的数据存储,其值从“2014-06-12T12:03:10.052000”(最旧)到“2014-06-12T16:08:39.542000”(最新)在我的记录中,我如何获得例如2014-06-12T14:00:00之前的记录或2014-06-12T15:00:00更新的记录?
欢迎任何文档示例或指针。谢谢!
答案 0 :(得分:3)
答案是,从CKAN 2.2开始,这是不可能的。 datastore_delete和datastore_search操作仅采用“field = value”类型的过滤器。
对于datastore_search,还有一个替代方法:datastore_search_sql,它允许您提供自己的SQL查询,从而实现范围搜索。 (我认为限制是这只适用于公共数据集,并且需要一个只读数据库用户,CKAN仅支持Postgres 9.1 +)。
目前正在开发一个实验性分支1725,它将允许插件扩展数据存储区运行的SQL查询。这将允许插件实现新类型的过滤器,例如范围。如果您是开发人员,您可能想尝试该分支。
答案 1 :(得分:0)
诀窍是标记值,以便过滤器可立即捕获您希望删除的所有值。
以下是过滤器的示例:
filter = {"col1": 9876543210, "col2": 9876543210}