RavenDb字符串查询返回意外结果

时间:2012-07-22 19:08:45

标签: ravendb querying

我有以下代码

        IDocumentSession documentSession = store.OpenSession();
        var schools = documentSession.Query<School>().Where(x => x.SchoolName == "My Primary School").ToList();
        foreach (var school in schools)
        {
            Console.WriteLine(school);
        }

        schools = documentSession.Query<School>().Where(x => x.Id == "109940").ToList();
        foreach (var school in schools)
        {
            Console.WriteLine(school.SchoolName);  // returns My Primary School
        }

当第一个查询运行时,虽然我在数据库中有匹配的记录,但不会返回任何记录。但是第二个查询返回我期望的记录。我正在运行db作为嵌入式,我自己没有设置任何索引

更新:所以如果我自定义查询以等待非陈旧的结果它工作正常,我是否需要创建永久索引?

1 个答案:

答案 0 :(得分:1)

这就是RavenDB的行为方式。如果没有索引来满足您的查询,RavenDB将在查询时动态创建索引,并返回过时的结果。

这就是为什么你第二次得到你想象的结果。这是RavenDB的关键设计之一,让索引在后台执行工作,并允许过时的结果而不是阻止查询,直到索引不是陈旧的。

在生产中,一旦RavenDB检测到索引经常使用,临时索引将被提升为自动索引。您也可以在某个时刻创建静态索引,而不是在自动索引上进行中继。