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

时间:2013-01-04 19:29:45

标签: f# nosql ravendb

我正在使用RavenDB 2.0 unstable。 是否可以使用来自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))
    ...

如何完成这样的事情?

1 个答案:

答案 0 :(得分:3)

是的,你可以这样做。

您可以在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 db引擎中被序列化并执行。