1

私は変換を伴うインデックスを持っています:

docs.FeedPosts
    .SelectMany(doc => (doc.Labels).DefaultIfEmpty(), (doc, docLabelsItem1) => new {AnnouncementGuid = doc.AnnouncementGuid, CreationDateUtc = doc.CreationWhenAndWhere.Time, FeedOwner = doc.FeedOwner, Key = doc.Key, Labels_Text = doc.Labels
    .Select(label => label.Text), SequentialId = ((long)doc.SequentialId), SubjectGuid = doc.SubjectGuid, SubjectId = doc.SubjectId})

(変身)

results
    .Select(doc => new {doc = doc, tags = Database.Load(doc.Key)})
    .Select(__h__TransparentIdentifier1 => new {AnnouncementGuid = __h__TransparentIdentifier1.tags.AnnouncementGuid, AreCommentsLocked = __h__TransparentIdentifier1.tags.AreCommentsLocked, Author = __h__TransparentIdentifier1.tags.Author, Comments = __h__TransparentIdentifier1.tags.Comments, CreationWhenAndWhere = __h__TransparentIdentifier1.tags.CreationWhenAndWhere, FeedOwner = __h__TransparentIdentifier1.tags.FeedOwner, Key = __h__TransparentIdentifier1.tags.Key, Labels = __h__TransparentIdentifier1.tags.Labels, MessageBody = __h__TransparentIdentifier1.tags.MessageBody, SequentialId = __h__TransparentIdentifier1.tags.SequentialId, SubjectGuid = __h__TransparentIdentifier1.tags.SubjectGuid, SubjectId = __h__TransparentIdentifier1.tags.SubjectId})

これは、データのクエリに役立ちます。しかし、その後統計を要求すると、間違ったドキュメント数が返されます! (クエリを 0 の結果に制限し、raven 統計を要求します)。

私のドキュメントは次のようになっているようです:

{
    Labels: [
    { Text: "label 1" }
    { Text: "label 2" }
    ]
}

Raven は、この 1 つのドキュメントに対して 2 つのインデックス エントリを生成します。Raven クエリ ツールを見ると、最初のインデックスには実際のインデックス データが含まれており、2 番目のインデックス ドキュメントは完全に空です。

ドキュメントに 3 つのラベルがある場合、3 つのインデックス結果が生成されます...そして、「カウント」は本来あるべきものの 3 倍になります。

どうしたの?

ありがとう

4

1 に答える 1

1

I translated your index to the query syntax, because that is easier to look at:

from doc in docs.FeedPosts
from NOT_USING_THIS in doc.labels
select new 
{
    AnnouncementGuid = doc.AnnouncementGuid, 
    CreationDateUtc = doc.CreationWhenAndWhere.Time, 
    FeedOwner = doc.FeedOwner, 
    Key = doc.Key, 
    Labels_Text = doc.Labels.Select(label => label.Text), 
    SequentialId = ((long)doc.SequentialId), 
    SubjectGuid = doc.SubjectGuid, 
    SubjectId = doc.SubjectId}
}

The second from clause is the SelectMany() in your index, whose value you are not using If you'll remove that and work on top of the root object, you won't have this issue.

The docs for this are: http://ravendb.net/docs/faq/skipped-results

于 2012-07-10T08:13:51.340 に答える