2012-01-13 36 views
0

我对RavenDB相当陌生,所以很抱歉,如果我的问题听起来很愚蠢。我有一个包含DateTime属性的类。我将这个类的实例存储在RavenDB中。我已经定义的索引方式如下:RavenDB按索引和日期时间查询

from doc in docs.Orders 
from docItemsItem in ((IEnumerable<dynamic>)doc.Items).DefaultIfEmpty() 
select new { Items_Price_Amount = docItemsItem.Price.Amount, Items_Quantity = docItemsItem.Quantity, Date = doc.Date } 

http://dl.dropbox.com/u/3055964/Capture.GIF < - 这里是截图

下面的类定义:

public class Order 
    { 
     public DateTime Date { get; set; } 
     public IList<OrderItem> Items { get; set; } 
     public string CustomerId { get; set; } 

     public Order() 
     { 
      Items = new List<OrderItem>(); 
     } 
    } 

现在,当我尝试查询RavenDB与上面显示的指数,查询完全没有结果。

var orders = session.Query<Order>("OrdersIndex").Where(o => o.Date > DateTime.Now).ToList(); // orders.Count == 0 

如果我忽略从查询索引,就像这样:

var orders = session.Query<Order>().Where(o => o.Date > DateTime.Now).ToList(); // orders.Count == 128 

创建一个临时索引和eveything按预期工作。

有没有人有任何想法我的查询有什么问题? 谢谢。

UPDATE

还好吧,我删除字段日期,项目,价格,数量和项目,数量通过管理工作室(在屏幕截图所示),而现在的查询工作正常。任何人都知道为什么?明确定义这些字段的目的是什么?

+0

你可以尝试提供全面失败的测试来了解什么是怎么回事? – 2012-01-13 21:40:30

+0

感谢您的回复Ayende,感谢您的帮助和您投入RavenDB的努力:)我将在几个小时内更新我的文章,并上传数据库和完整的工作测试。但可能,这是我的错,因为我猜我没有正确使用索引。 – Davita 2012-01-14 10:21:33

回答

3

检查索引中的日期是否存储为索引(x => x.Date,FieldIndexing.Default)。

我把它设置为FieldIndexing.Analysed,并没有得到正确的结果。

我需要阅读更多的关于不同FieldIndexing选项:)之间的差异