Csharp/C#教程:在聚合框架中使用Facets C#with Multiple Facet,Unwind和sortByCount分享


在聚合框架中使用Facets C#with Multiple Facet,Unwind和sortByCount

如何在C#中表示此管道?

-----Id -----Name -----ProductAttributes (object array) | -----ProductAttributeType -----ProductAttributeValues (string array) 

我的collections:

 { "_id" : ObjectId("5b41a5e225cd892c14628b78"), "Name" : "Esmalte Super Pérola Fashion Glamour", "ProductAttributes" : [ { "ProductAttributeType" : "Coleção", "Values" : [ "Fashion" ] }, { "ProductAttributeType" : "Tamanho", "Values" : [ "8 ml" ] }, { "ProductAttributeType" : "Tom", "Values" : [ "Vermelho", "Cremoso" ] } ] } { "_id" : ObjectId("5b41a5e225cd892c14628b79"), "Name" : "Esmalte Fina Flor Azul 97", "ProductAttributes" : [ { "ProductAttributeType" : "Tamanho", "Values" : [ "8 ml" ] }, { "ProductAttributeType" : "Tom", "Values" : [ "Azul", "Cremoso" ] } ] } { "_id" : ObjectId("5b41a5e225cd892c14628b7a"), "Name" : "Esmalte Fina Flor Matte Cashmere", "ProductAttributes" : [ { "ProductAttributeType" : "Coleção", "Values" : [ "Matte" ] }, { "ProductAttributeType" : "Tamanho", "Values" : [ "8 ml" ] }, { "ProductAttributeType" : "Tom", "Values" : [ "Verde", "Matte", "Fosco" ] } ] } { "_id" : ObjectId("5b41a5e325cd892c14628b7b"), "Name" : "Esmalte Fina Flor Dany", "ProductAttributes" : [ { "ProductAttributeType" : "Tamanho", "Values" : [ "8 ml" ] }, { "ProductAttributeType" : "Tom", "Values" : [ "Azul" ] } ] } { "_id" : ObjectId("5b41a5e325cd892c14628b7c"), "Name" : "Esmalte Fina Flor Londres", "ProductAttributes" : [ { "ProductAttributeType" : "Tamanho", "Values" : [ "8 ml" ] }, { "ProductAttributeType" : "Tom", "Values" : [ "Chumbo", "Perolado", "Cintilante" ] } ] } { "_id" : ObjectId("5b41a5e325cd892c14628b7d"), "Name" : "Esmalte Fina Flor Paris", "ProductAttributes" : [ { "ProductAttributeType" : "Tamanho", "Values" : [ "8 ml" ] }, { "ProductAttributeType" : "Tom", "Values" : [ "Roxo", "Perolado" ] } ] } { "_id" : ObjectId("5b41a5e425cd892c14628b7e"), "Name" : "Esmalte Hits 201", "ProductAttributes" : [ { "ProductAttributeType" : "Tamanho", "Values" : [ "6 ml" ] }, { "ProductAttributeType" : "Tom", "Values" : [ "Rosa", "Cremoso" ] } ] } { "_id" : ObjectId("5b41a5e425cd892c14628b7f"), "Name" : "Esmalte Hits 209", "ProductAttributes" : [ { "ProductAttributeType" : "Tamanho", "Values" : [ "6 ml" ] }, { "ProductAttributeType" : "Tom", "Values" : [ "Goiaba", "Cremoso" ] } ] } 

来自MongoDB Compass的管道

 [{ $unwind: { path: "$ProductAttributes"} }, { $unwind: { path: '$ProductAttributes.Values',} }, { $facet: { Tom:[ {$match:{"ProductAttributes.ProductAttributeType":{$eq: 'Tom'}}}, {$sortByCount : '$ProductAttributes.Values'} ], Colecao:[ {$match:{"ProductAttributes.ProductAttributeType":{$eq: 'Coleção'}}}, {$sortByCount : '$ProductAttributes.Values'} ] } }] 

我正在尝试此代码但没有成功。 而且我不知道如何在管道中添加两个方面。

行中出错.Facet(facetPipelineTom);

错误CS0411无法根据用法推断方法“IAggregateFluent.Facet(IEnumerable>,AggregateFacetOptions)”的类型参数。 尝试显式指定类型参数。

_product来自IMongoCollection类型

  var tomFilter = Builders.Filter.ElemMatch(p => p.ProductAttributes, p => p.ProductAttributeType == "Tom"); var matchTom = PipelineStageDefinitionBuilder.Match(tomFilter); var colecaoFilter = Builders.Filter.ElemMatch(p => p.ProductAttributes, p => p.ProductAttributeType == "Coleção"); var matchColecao = PipelineStageDefinitionBuilder.Match(colecaoFilter); var sortByCount = PipelineStageDefinitionBuilder.SortByCount("$ProductAttributeType.Values"); var pipelineTom = PipelineDefinition<Product, AggregateSortByCountResult>.Create(new IPipelineStageDefinition[] { matchTom, sortByCount }); var pipelineColecao = PipelineDefinition<Product, AggregateSortByCountResult>.Create(new IPipelineStageDefinition[] { matchColecao, sortByCount }); var facetPipelineTom = AggregateFacet.Create("Tom", pipelineTom); var facetPipelineColecao = AggregateFacet.Create("Colecao", pipelineTom); var pipeline = _products.Aggregate() .Unwind(p => p.ProductAttributes) .Unwind(p => p["ProductAttributes.Values"]) .Facet(facetPipelineTom); 

我认为,其中一个挑战是,在$unwind阶段之后,你必须立即处理你的$facet阶段的BsonDocument – 而不是Product s。

无论如何,这是一个工作版本:

上述就是C#学习教程:在聚合框架中使用Facets C#with Multiple Facet,Unwind和sortByCount分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!

 var tomFilter = Builders.Filter.Eq("ProductAttributes.ProductAttributeType", "Tom"); var matchTom = PipelineStageDefinitionBuilder.Match(tomFilter); var colecaoFilter = Builders.Filter.Eq("ProductAttributes.ProductAttributeType", "Coleção"); var matchColecao = PipelineStageDefinitionBuilder.Match(colecaoFilter); var sortByCount = PipelineStageDefinitionBuilder.SortByCount("$ProductAttributes.Values"); var pipelineTom = PipelineDefinition>.Create(new IPipelineStageDefinition[] { matchTom, sortByCount }); var pipelineColecao = PipelineDefinition>.Create(new IPipelineStageDefinition[] { matchColecao, sortByCount }); var facetPipelineTom = AggregateFacet.Create("Tom", pipelineTom); var facetPipelineColecao = AggregateFacet.Create("Colecao", pipelineColecao); var pipeline = _products.Aggregate() .Unwind(p => p.ProductAttributes) .Unwind(p => p["ProductAttributes.Values"]) .Facet(facetPipelineTom, facetPipelineColecao); Console.WriteLine(pipeline.Single().Facets.ToJson()); 

本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。

ctvol管理联系方式QQ:251552304

本文章地址:https://www.ctvol.com/cdevelopment/988472.html

(0)
上一篇 2021年12月23日
下一篇 2021年12月23日

精彩推荐