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

F# 如何在F中使用复杂查询查询RavenDB#,f#,nosql,ravendb,F#,Nosql,Ravendb,我正在使用RavendB2.0。 是否可以使用lambda或类似技术(linq?)从F#查询Ravendb2.0 下面是意图示例代码。我试图在过去72小时内得到所有的帖子。这是错误的,但它让人明白了这一点 static member public GetTopPosts _ = use store = (new DocumentStore(Url = Docs.serverUrl, DefaultDatabase = Docs.dbName )).Initialize() use

我正在使用RavendB2.0。 是否可以使用lambda或类似技术(linq?)从F#查询Ravendb2.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))
    ...
static member public getts\u=
使用store=(新的DocumentStore(Url=Docs.serverUrl,DefaultDatabase=Docs.dbName)).Initialize()
使用session=store.OpenSession()
让result=session.Query().Where(funx->x.Date>DateTime.Now-newtimespan(72,0,0))
...
这样的事情怎么能做到呢?

是的,你可以做到

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

在您的情况下,您的查询将如下所示

let getTopPostsAsOf date =
    use session = docStore.OpenSession()
    query {
       for post in session.Query<Post>() do
       where (post.Date > date)
       select post
    } |> Seq.toArray
有几件事需要注意

  • DocumentStore应该在应用程序启动时创建一次,而且只能创建一次

  • 通常,在查询表达式中只能使用一小部分库调用,因此我传入已计算的日期。这是因为这些表达式树最终被序列化并在raven db引擎中执行

  • RavenDB 2.0不再支持F#客户端。请看这里:
    let result = getTopPostsAsOf (DateTime.Now - TimeSpan.FromHours(72))