有没有办法查询昨天在 FQL 中创建的所有帖子的计数?
Is there a way to query the COUNT of all the POSTS created YESTERDAY in FQL?
有没有办法在 FQL 中查询昨天创建的所有帖子的数量?我知道如何在 SQL 中执行此操作,但在 FQL 中不清楚。
是的,有!
FQL 作为一种查询语言比 SQL 更像一种编程语言,因为它有许多执行特定任务的函数,并且它的运行方式允许您以可组合的方式组合函数.因此,我们可以通过将问题分解为更小的问题来解决问题,解决这些问题,然后将解决方案组合成一个查询。
第一个容易解决的问题是昨天。它不是特定日期,而是始终是当前日期的前一天。我们如何获得当前日期?在 fauna-shell
(或通过网络 Shell 在 Fauna 控制台中:https://dashboard.fauna.com),您可以 运行 这个查询:
> ToDate(Now())
Date("2019-12-13”)
那么,我们如何获得 YESTERDAY?
> TimeSubtract(ToDate(Now()), 1, "day")
Date("2019-12-12")
我们的 post 可能有一个 post 日期,它是一个字符串,所以让我们把它变成一个字符串:
> ToString(TimeSubtract(ToDate(Now()), 1, "day"))
'2019-12-12'
下一个问题,查找具有特定 post 日期的 posts。与大多数 SQL 数据库不同,FaunaDB 不会执行完整 table 扫描来定位记录,因此搜索和排序需要索引。
但首先,如果您还没有,让我们创建一个“posts”集合来存储我们所有的 post 文档:
> CreateCollection({ name: "posts" })
{ ref: Collection("posts"),
ts: 1576256260580000,
history_days: 30,
name: 'posts' }
然后我们可以创建索引:
> CreateIndex({
name: "posts_by_date",
source: Collection("posts"),
terms: [{ field: ["data", "postdate"]}],
values: [{field: ["data", "postdate"]}, {field: ["ref"]}]
})
{ ref: Index("posts_by_date"),
ts: 1576256995310000,
active: false,
serialized: true,
name: 'posts_by_date',
source: Collection("posts"),
terms: [ { field: [ 'data', 'postdate' ] } ],
values: [ { field: [ 'data', 'postdate' ] }, { field: [ 'ref' ] } ],
partitions: 1 }
该索引来源于“posts”集合,指定“postdate”字段作为搜索词,对于匹配记录,returns“postdate”和“ref”字段值。 “ref”是 FaunaDB 中所有文档的主键字段。
在我们搜索 post 之前,让我们创建一些:
> Create(Collection("posts"), { data: { title: "Last week", postdate: "2019-12-06" }})
{ ref: Ref(Collection("posts"), "251656374064251392"),
ts: 1576257070530000,
data: { title: 'Last week', postdate: '2019-12-06' } }
> Create(Collection("posts"), { data: { title: "Yesterday", postdate: "2019-12-12" }})
{ ref: Ref(Collection("posts"), "251656397874266624"),
ts: 1576257093220000,
data: { title: 'Yesterday', postdate: '2019-12-12' } }
> Create(Collection("posts"), { data: { title: "Today", postdate: "2019-12-13" }})
{ ref: Ref(Collection("posts"), "251656411087372800"),
ts: 1576257105810000,
data: { title: 'Today', postdate: '2019-12-13' } }
所以现在我们有三个 post。让我们尝试按日期搜索一个。我们将使用 Paginate
检索所有匹配的索引条目:
> Paginate(Match(Index("posts_by_date"), "2019-12-12"))
{ data:
[ [ '2019-12-12', Ref(Collection("posts"), "251656397874266624") ] ] }
在该查询中,我们手动指定了昨天的日期。让我们用计算的日期替换手动日期:
> Paginate(Match(Index("posts_by_date"), ToString(TimeSubtract(ToDate(Now()), 1, "day"))))
{ data:
[ [ '2019-12-12', Ref(Collection("posts"), "251656397874266624") ] ] }
不显示结果,我们数一数:
> Count(Match(Index("posts_by_date"), ToString(TimeSubtract(ToDate(Now()), 1, "day"))))
1
如果我们用昨天的日期添加另一个 post 会怎样?
> Create(Collection("posts"), { data: { title: "Another Yesterday", postdate: "2019-12-12" }})
{ ref: Ref(Collection("posts"), "251657749479293440"),
ts: 1576258382210000,
data: { title: 'Another Yesterday', postdate: '2019-12-12' } }
> Count(Match(Index("posts_by_date"), ToString(TimeSubtract(ToDate(Now()), 1, "day"))))
2
这就是我们昨天postposted 的所有计数。
有没有办法在 FQL 中查询昨天创建的所有帖子的数量?我知道如何在 SQL 中执行此操作,但在 FQL 中不清楚。
是的,有!
FQL 作为一种查询语言比 SQL 更像一种编程语言,因为它有许多执行特定任务的函数,并且它的运行方式允许您以可组合的方式组合函数.因此,我们可以通过将问题分解为更小的问题来解决问题,解决这些问题,然后将解决方案组合成一个查询。
第一个容易解决的问题是昨天。它不是特定日期,而是始终是当前日期的前一天。我们如何获得当前日期?在 fauna-shell
(或通过网络 Shell 在 Fauna 控制台中:https://dashboard.fauna.com),您可以 运行 这个查询:
> ToDate(Now())
Date("2019-12-13”)
那么,我们如何获得 YESTERDAY?
> TimeSubtract(ToDate(Now()), 1, "day")
Date("2019-12-12")
我们的 post 可能有一个 post 日期,它是一个字符串,所以让我们把它变成一个字符串:
> ToString(TimeSubtract(ToDate(Now()), 1, "day"))
'2019-12-12'
下一个问题,查找具有特定 post 日期的 posts。与大多数 SQL 数据库不同,FaunaDB 不会执行完整 table 扫描来定位记录,因此搜索和排序需要索引。
但首先,如果您还没有,让我们创建一个“posts”集合来存储我们所有的 post 文档:
> CreateCollection({ name: "posts" })
{ ref: Collection("posts"),
ts: 1576256260580000,
history_days: 30,
name: 'posts' }
然后我们可以创建索引:
> CreateIndex({
name: "posts_by_date",
source: Collection("posts"),
terms: [{ field: ["data", "postdate"]}],
values: [{field: ["data", "postdate"]}, {field: ["ref"]}]
})
{ ref: Index("posts_by_date"),
ts: 1576256995310000,
active: false,
serialized: true,
name: 'posts_by_date',
source: Collection("posts"),
terms: [ { field: [ 'data', 'postdate' ] } ],
values: [ { field: [ 'data', 'postdate' ] }, { field: [ 'ref' ] } ],
partitions: 1 }
该索引来源于“posts”集合,指定“postdate”字段作为搜索词,对于匹配记录,returns“postdate”和“ref”字段值。 “ref”是 FaunaDB 中所有文档的主键字段。
在我们搜索 post 之前,让我们创建一些:
> Create(Collection("posts"), { data: { title: "Last week", postdate: "2019-12-06" }})
{ ref: Ref(Collection("posts"), "251656374064251392"),
ts: 1576257070530000,
data: { title: 'Last week', postdate: '2019-12-06' } }
> Create(Collection("posts"), { data: { title: "Yesterday", postdate: "2019-12-12" }})
{ ref: Ref(Collection("posts"), "251656397874266624"),
ts: 1576257093220000,
data: { title: 'Yesterday', postdate: '2019-12-12' } }
> Create(Collection("posts"), { data: { title: "Today", postdate: "2019-12-13" }})
{ ref: Ref(Collection("posts"), "251656411087372800"),
ts: 1576257105810000,
data: { title: 'Today', postdate: '2019-12-13' } }
所以现在我们有三个 post。让我们尝试按日期搜索一个。我们将使用 Paginate
检索所有匹配的索引条目:
> Paginate(Match(Index("posts_by_date"), "2019-12-12"))
{ data:
[ [ '2019-12-12', Ref(Collection("posts"), "251656397874266624") ] ] }
在该查询中,我们手动指定了昨天的日期。让我们用计算的日期替换手动日期:
> Paginate(Match(Index("posts_by_date"), ToString(TimeSubtract(ToDate(Now()), 1, "day"))))
{ data:
[ [ '2019-12-12', Ref(Collection("posts"), "251656397874266624") ] ] }
不显示结果,我们数一数:
> Count(Match(Index("posts_by_date"), ToString(TimeSubtract(ToDate(Now()), 1, "day"))))
1
如果我们用昨天的日期添加另一个 post 会怎样?
> Create(Collection("posts"), { data: { title: "Another Yesterday", postdate: "2019-12-12" }})
{ ref: Ref(Collection("posts"), "251657749479293440"),
ts: 1576258382210000,
data: { title: 'Another Yesterday', postdate: '2019-12-12' } }
> Count(Match(Index("posts_by_date"), ToString(TimeSubtract(ToDate(Now()), 1, "day"))))
2
这就是我们昨天postposted 的所有计数。