Как запросить документ RavenDb на основе существования свойства - PullRequest
2 голосов
/ 15 марта 2012

Обновлено с точными классами и данными

У меня есть новая версия документа с новым свойством:

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)

ничего не возвращает.

Орен намекнул, используя 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)

Я что-то не так делаюс Содержит?Как мне отладить эти индексы?

Ответы [ 2 ]

1 голос
/ 29 августа 2014

Использование .Contains("...") в предложении where мне тоже не помогло.Мне удалось решить проблему поиска документов с отсутствующими свойствами, используя следующее определение индекса:

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

Впоследствии я теперь могу использовать этот индекс с помощью UpdateByIndex для запуска PatchRequest скриптов, которые исправляют отсутствующиесвойства.

1 голос
/ 15 марта 2012

Вы не можете выполнить такой запрос, потому что вы запрашиваете все документы, которые имеют это свойство, и имеют нулевое значение.

Вы можете сделать это с помощью индекса, например:

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