f# - 如何在 F# 中使用复杂查询来查询 RavenDB

标签 f# nosql ravendb

我正在使用 RavenDB 2.0 不稳定。 是否可以使用 F# 中的 lambda 或类似技术(linq?)查询 RavenDB 2.0?

这是意图示例代码。我正在尝试获取过去 72 小时内的所有帖子。这是错误的,但它传达了这个想法。

static member public GetTopPosts _ =
    use store = (new DocumentStore(Url = Docs.serverUrl, DefaultDatabase = Docs.dbName )).Initialize()
    use session = store.OpenSession()
    let result = session.Query<Post>().Where(fun x -> x.Date > DateTime.Now - new TimeSpan(72,0,0))
    ...

这样的事情怎么能完成?

最佳答案

是的,你可以做到这一点。

您可以在 FAKE 中找到这方面的示例

在您的情况下,您的查询看起来像这样

let getTopPostsAsOf date =
    use session = docStore.OpenSession()
    query {
       for post in session.Query<Post>() do
       where (post.Date > date)
       select post
    } |> Seq.toArray

这将被调用

let result = getTopPostsAsOf (DateTime.Now - TimeSpan.FromHours(72))

有几点需要注意。

  1. DocumentStore 应该在应用程序启动时创建一次,而且只创建一次。

  2. 此外,在查询表达式中通常只能使用一小组库调用,这也是我传入已计算日期的原因。这样做的原因是因为这些表达式树最终在 raven 数据库引擎中被序列化和执行。

关于f# - 如何在 F# 中使用复杂查询来查询 RavenDB,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14163614/

相关文章:

mongodb - NoSql自连接就像

ravendb - 按 RavenDB 中的整数列表排序

f# 签名匹配解释

c# - 延续:我可以在 F# 异步工作流或 C# 异步函数中序列化延续吗?

asynchronous - 等待取消异步工作流

mysql - 用于小型数据集的 MongoDB

F#:SRTP静态扩展方法类型匹配不一致

debugging - Cassandra sstable2json 不起作用

c# - RavenDB 中的 Map/Reduce 抛出 InvalidOperationException

RavenDB 4 和身份 ID