从Ravendb加载所有特定类型的对象,并使用include加载相关文档

时间:2019-01-03 07:54:32

标签: database ravendb

我正在尝试从ravenDB中加载类型为原因的所有元素,并尝试包含包含在每个特定对象中的相关文档(以提高性能)。例如,我正在尝试将以下两个呼叫混合在一起:

要加载所有文档:

import Foundation

class pointsModel {

    var Points: Int?

    init(Points: Int?){

        self.Points = Points
    }
}

要将相关文档包括在通话中:

select a11.url
,Sum(case when a12.date between a11.dt_crtd and a11.dt_crtd+30 then 1 else 0) Interval_1    
,Sum(case when a12.date between a11.dt_crtd+31 and a11.dt_crtd+60 then 1 else 0) Interval_2
,Sum(case when a12.date between a11.dt_crtd+61 and a11.dt_crtd+90 then 1 else 0) Interval_3 
from page_creation a11
join page_visits a12
on a11.link = a12.url
group by a11.url

有人知道我该如何解决这个问题?

编辑对于任何遇到此问题的人,一种可能的解决方案如下:

 _session.Advanced.DocumentQuery<Cause>()
         .WhereEquals(x => x.IsDeleted, false)
         .WaitForNonStaleResultsAsOfLastWrite()
         .ToArray();

编辑2 我遇到了一个不同的问题,但与上述问题有关。如果我想在Include调用中添加一个额外的元素,有谁知道我该如何实现?我尝试了以下方法,但是我认为这不是正确的方法,因为正在对数据库进行额外的调用:

_session.Include<Cause>(x => x.ValueIds)
        .Load(idCause);

1 个答案:

答案 0 :(得分:3)

1)除了您在“ Edit1”中提到的解决方案, 您还可以使用:

var results = session.Advanced.DocumentQuery<Cause>()
     .Include(x => x.ValueIds)
     .WhereEquals(x => x.IsDeleted, false)
     .ToList();


2)在同一操作上使用多个包含(就像您在“ Edit2 ”中所做的一样)是正确的。
参见:https://github.com/ravendb/book/blob/v4.0/Ch02/Ch02.md#includes