$ facet не десериализуется - PullRequest
0 голосов
/ 24 декабря 2018

Я пытаюсь запустить эту команду:

var applicationsPipeline = PipelineDefinition<AffiliateRecord, List<ApplicationRecord>>.Create(new IPipelineStageDefinition[] {
    PipelineStageDefinitionBuilder.Match<AffiliateRecord>(filter),
    PipelineStageDefinitionBuilder.Unwind<AffiliateRecord, AffiliateRecord>("Applications"),
    PipelineStageDefinitionBuilder.Match<AffiliateRecord>(matchApplications),
    PipelineStageDefinitionBuilder.ReplaceRoot<AffiliateRecord, List<ApplicationRecord>>(x => x.Applications),
    PipelineStageDefinitionBuilder.Skip<List<ApplicationRecord>>(offset),
    PipelineStageDefinitionBuilder.Limit<List<ApplicationRecord>>(limit),
});

var applicationsFacet = AggregateFacet.Create("applications", applicationsPipeline);

var aggregate = collection
    .Aggregate()
    .Facet(applicationsFacet, ...);

var facetResult = await aggregate.SingleOrDefaultAsync();

но я получаю эту ошибку:

System.FormatException: Cannot deserialize a 'List<ApplicationRecord>' from BsonType 'Document'.

Чего мне не хватает?

1 Ответ

0 голосов
/ 26 декабря 2018

Я смог заставить его работать так:

var applicationsPipeline = PipelineDefinition<AffiliateRecord, ApplicationRecord>.Create(new IPipelineStageDefinition[] {
       PipelineStageDefinitionBuilder.Match<AffiliateRecord>(filter),
       PipelineStageDefinitionBuilder.Unwind<AffiliateRecord>(x => x.Applications),
       PipelineStageDefinitionBuilder.Match<BsonDocument>(new BsonDocument("$and", and)),
       PipelineStageDefinitionBuilder.ReplaceRoot<BsonDocument, ApplicationRecord>("$Applications"),
       PipelineStageDefinitionBuilder.Skip<ApplicationRecord>(offset),
       PipelineStageDefinitionBuilder.Limit<ApplicationRecord>(limit)
 });

, что заставляет меня думать, что ReplaceRoot имеет какую-то ошибку, потому что заставляет меня устанавливать Toutput как List вместо ApplicationRecord.

...