ravendb - Raven查询返回0个结果,用于包含

标签 ravendb

我有一个基本的架构

Post {
    Labels: [
        { Text: "Mine" }
        { Text: "Incomplete" }
    ]
}


我正在查询raven,要求所有带有“ Mine”和“ Incomplete”标签的帖子。

queryable.Where(candidate => candidate.Labels.Any(label => label.Text == "Mine"))
    .Where(candidate => candidate.Labels.Any(label => label.Text == "Incomplete"));


这会导致一个乌鸦查询(来自Raven服务器控制台)

Query: (Labels,Text:Incomplete) AND (Labels,Text:Mine)
Time: 3 ms
Index: Temp/XWrlnFBeq8ENRd2SCCVqUQ==
Results: 0 returned out of 0 total.


为什么是这样?如果查询仅包含“不完整”的内容,则会得到1个结果。
如果查询仅包含“ Mine”的结果,我将得到相同的结果-因此为什么要在这两个查询中都得到0个结果?

编辑:

好的-我走了一些。 “自动生成的索引”如下所示

from doc in docs.FeedAnnouncements
from docLabelsItem in ((IEnumerable<dynamic>)doc.Labels).DefaultIfEmpty()
select new { CreationDate = doc.CreationDate, Labels_Text = docLabelsItem.Text }


因此,我认为查询基本上是针对2个不同的值测试SAME标签。坏。

我将其更改为:

from doc in docs.FeedAnnouncements
from docLabelsItem1 in ((IEnumerable<dynamic>)doc.Labels).DefaultIfEmpty()
from docLabelsItem2 in ((IEnumerable<dynamic>)doc.Labels).DefaultIfEmpty()
select new { CreationDate = doc.CreationDate, Labels1_Text = docLabelsItem1.Text, Labels2_Text = docLabelsItem2.Text }


现在我的查询(在Raven Studio中)Labels1_Text:Mine AND Labels2_Text:Incomplete起作用了!

但是,当从Linq查询时,如何处理这些幻像字段(Labels1_Text和Labels2_Text)?

最佳答案

亚当,
你说对了。默认索引将生成2个索引条目,并且您的查询正在单个索引条目上执行。

您想要的是使用交集,或创建自己的索引,如下所示:

from doc in docs.FeedAnnouncements
select new { Labels_Text = doc.Labels.Select(x=>x.Text)}


这样一来,您就可以在单个索引条目中获得所有标签的文本,您可以在上面执行查询。

关于ravendb - Raven查询返回0个结果,用于包含,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10392119/

相关文章:

c# - 如何在 RavenDB 中创建具有多个分组的 map/reduce 索引

c# - WCF 中的 Raven DB session 管理

c# - 删除RavenDB中的所有文档

performance - RavenDB中如何决定是否将字段存储在索引中?

ravendb - 如何重写 RavenDB 中的 SaveChanges 方法?

sql-server - 从 SQL 复制到 RavenDB

asp.net-mvc - 支持 RavenDB 的 MVC4 成员(member)系统

嵌入式模式下不支持RavenDB IsOperationAllowedOnDocument

c# - 插入RavenDB;最快的方法

c# - 使用 RavenDB 和 LINQ 查找至少包含子集中所有元素的对象