gpt4 book ai didi

clojure - 从 Datomic 检索最近的实体

转载 作者:行者123 更新时间:2023-12-02 05:35:04 24 4
gpt4 key购买 nike

我对实体及其时间戳感兴趣。本质上,我想要一个按时间排序的实体列表。

为此,我编写了以下函数:

(defn return-posts
"grabs all posts from Datomic"
[]
(d/q '[:find ?title ?body ?slug
:where
[?e :post/title ?title]
[?e :post/slug ?slug]
[?e :post/body ?body]] (d/db connection)))

(defn get-postid-from-slug
[slug]
(d/q '[:find ?e
:in $ ?slug
:where [?e :post/slug ?slug]] (d/db connection) slug))

(defn get-post-timestamp
"given an entid, returns the most recent timestamp"
[entid]
(->
(d/q '[:find ?ts
:in $ ?e
:where
[?e _ _ _]
[?e :db/txInstant ?ts]] (d/db connection) entid)
(sort)
(reverse)
(first)))

我觉得这一定是源于无知的黑客行为。

是否有更精通 Datomic 惯用用法的人插话并升级我的范例?

最佳答案

我对向数据库添加额外时间戳的想法感到困扰,该数据库名义上将时间理解为一流原则,因此(经过一夜的思考 Ulrik Sandberg 概述的方法)发展了以下功能:

(defn return-posts
"grabs all posts from Datomic"
[uri]
(d/q '[:find ?title ?body ?slug ?ts
:where
[?e :post/title ?title ?tx]
[?e :post/slug ?slug]
[?e :post/body ?body]
[?tx :db/txInstant ?ts]] (d/db (d/connect uri))))

在 Datalog 中,省略与事务 ID 本身的绑定(bind)是惯用的,因为我们通常不关心。在这种情况下,我们非常关心,用 August Lileaas 的话说,希望“遍历交易”(在某些情况下,我们需要帖子创建时间,但对于此应用程序,交易时间足以满足订购实体的需要) )。

此方法的一个显着缺点是最近编辑的条目将在列表中增加。为此,我稍后必须做一些事情,以便让他们在 Datomic 中“首次出现”以获取博客标准帖子历史记录。

总结一下:我已经为每个“post”实体ID绑定(bind)了交易实体ID,然后使用此函数查找交易时间戳以供以后排序。

关于clojure - 从 Datomic 检索最近的实体,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19071694/

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