mongodb排序规则不适用于facet阶段的insinde聚合

Posted

技术标签:

【中文标题】mongodb排序规则不适用于facet阶段的insinde聚合【英文标题】:mongodb collation doesn't work insinde aggregation with facet stage 【发布时间】:2020-11-09 13:07:29 【问题描述】:

我想在使用聚合后对我的产品进行排序,在我的聚合管道中,我在 $facet 阶段使用 $sort。实际上排序对所有字段都很好,直到我尝试对字符串字段(名称)升序/降序进行排序。

问题是排序在我的土耳其语中无法正常工作。所以我正在使用排序选项。

我正在使用 C#。

通常我使用如下排序规则区域设置

PipelineDefinition<BsonDocument, Model> pipeline = new BsonDocument[]

   //some stages,

  new BsonDocument().Add("$sort", new BsonDocument().Add("sortingParameter", -1)),

   //some stages
;

  var options = new AggregateOptions()  Collation = new Collation("tr") ;
  var cursor = _collection.Aggregate(pipeline, options); 
                                                                                                  

它正在工作,这里没问题。

但是我的一些查询比上面的例子更复杂,例如 (下面我显示的是我的查询的缩短 BsonDocument 版本)

db.getCollection('collName').aggregate([ 
"$match":     // match operations  
, 
 "$facet": 
     "product_list": [
         "$group": "_id":  /some grouping parameters ,
          "$sort":  "_id.Name": -1.0  ,
          "$project":  // some projects  
   ]])

对于上述查询,我​​使用相同的聚合选项

var options = new AggregateOptions()  Collation = new Collation("tr") ;

但排序结果不正确。当我尝试删除 $match 阶段时,我不知道它是如何工作的。

那么,有没有办法解决这个问题,或者这种查询是不可能的?

【问题讨论】:

【参考方案1】:

如果我使用 collat​​ion-locale 设置创建集合,而不是在 AggregateOptions 中使用 collat​​ion-locale 设置,则查询可以正常工作。

【讨论】:

请分享一个例子。

以上是关于mongodb排序规则不适用于facet阶段的insinde聚合的主要内容,如果未能解决你的问题,请参考以下文章

MySQL 查询不适用于 NOT IN

为啥排序规则不适用于子查询中的 xml 路径?

R语言ggplot2可视化分面图(faceting)并设置每一个分面中的条形图都是排序的(bars are in order in each per facet of facet_warp)

strip.position external in 两列 facet_wrap 图

mongoDB查询进阶聚合管道 -- 阶段操作符

使用正则表达式元素数组的 MongoDB 查询 $in