如何按自定义(非自然排序)字段

时间:2016-11-03 21:09:03

标签: mongodb mongodb-query aggregation-framework mongodb-aggregation

我正在试验MongoDB及其聚合框架。通过展开操作,我可以将具有数组字段的文档拆分为每个数组索引的多个文档。现在,如果数组中的数据没有自然排序顺序,我该如何在MongoDB中对其进行排序?

示例:

产品集合包含以下文档(省略_id字段)

{ "type" : "t-shirt", "size" : [ "S", "M", "L" ] }
{ "type" : "pants", "size" : [ "XS", "S", "M", "L", "XL" ] }

size字段展开收集数据后,结果为

{ "type" : "t-shirt", "size" : "S" }
{ "type" : "t-shirt", "size" : "M" }
{ "type" : "t-shirt", "size" : "L" }
{ "type" : "pants", "size" : "XS" }
{ "type" : "pants", "size" : "S" }
{ "type" : "pants", "size" : "M" }
{ "type" : "pants", "size" : "L" }
{ "type" : "pants", "size" : "XL" }

size字段没有自然排序,例如XL和XS彼此相邻排序,尽管它们应该排序到第一个/最后一个位置。

migth 通过首先将每个大小投影到相应的数字来解决这个问题,即XS = 1,S = 2 ......但是否有更简单的方法来执行自定义排序吗

1 个答案:

答案 0 :(得分:1)

是的,没有更简单的方法,但你有三种方法可以做到,

1)如您所指定,您可以使用 $project并根据大小输入数字123并对数字进行排序

2)您可以按大小写字符串asc的第二个字符排序,然后对其进行排序

3)使用$text根据其重量进行排序