如何根据属性的存在查询RavenDb文档

时间:2012-03-15 04:33:05

标签: linq ravendb

更新了确切的类和&数据

我有一个新版本的文档,其中包含一个新属性:

public class PaperSite
{
    public string Title { get; set; }
    public string Html { get; set; }
    public ParsedPaper ParsedPaper { get; set; } // This is a new property
}

我想查询没有属性集的所有文档(最初,显然都是这些文档)。但是,这样的查询:

docs.Query<PaperSite>.Where( x => x.ParsedPaper == null)

什么都不返回。

Oren暗示使用contains,所以我创建了以下内容:

from site in docs.PaperSites
where site.Contains("ParsedPaper") == false
select new { PaperSite = site }

然而,这没有任何回报。

在数据库中,我有以下文档(及更多):

PaperSites/34 { "Title": "Paper Site Zero (v0)", "Html": null},
PaperSites/97 { "Title": "Paper Site Three", "Html": "<html></html>", "ParsedPaper": null }

以下索引:

from site in docs.PaperSites
where site.ParsedPaper == null
select new { PaperSite = site }

返回正确的文档(ParsedPaper存在的文档,但为null)

我是否对Contains做错了什么?如何调试这些索引?

2 个答案:

答案 0 :(得分:1)

您无法执行此类查询,因为您要求的是具有此属性的所有文档,并将其设置为null。

您可以使用索引执行此操作,例如:

from doc in docs
where doc.Contains("Description") == false
select new { doc.Id }

答案 1 :(得分:1)

使用.Contains("...")条款中的where对我来说也不起作用。我能够使用以下索引定义解决我找到缺少属性的文档的问题:

from doc in docs.MyDocType
where(doc.Description == null)
select new { doc.Id }

随后,我现在可以通过UpdateByIndex使用此索引来运行修复缺失属性的PatchRequest脚本。