当前位置: 首页 > 知识库问答 >
问题:

如何按自定义(非自然有序)字段对文档进行排序

傅宏恺
2023-03-14

我正在试验MongoDB及其聚合框架。对于一个数组中的多个文档,我可以使用一个数组来拆分文档。现在,如果数组中的数据没有自然排序顺序,我如何在MongoDB中对其进行排序?

例子:

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

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

大小字段展开采集数据后,结果如下:

{ "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是相邻排序的,尽管它们应该排序到第一位/最后一位。

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

共有1个答案

长孙深
2023-03-14

是的,没有更简单的方法,但你有三种方法,

1) 正如您指定的,您可以使用$project并根据大小放置数字123,然后根据该数字进行排序

2) 您可以通过substr 2字符对大小字符串asc的第二个字符进行排序,并对其进行排序

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

 类似资料:
  • 问题内容: 我有一个对象数组,这些对象的属性称为“ CODE”。 如何通过自定义顺序对数组进行排序,例如: 尝试各种方法均未成功。请帮忙。 问题答案: 您可以将函数与函数一起使用。

  • 问题内容: class CustomerAdmin(admin.ModelAdmin): list_display = (‘foo’, ‘number_of_orders’) models.py class Order(models.Model): bar = models.CharField[…] customer = models.ForeignKey(Customer) class Cust

  • 问题内容: 我正在使用ElasticSearch 2.4.2(通过Java的HibernateSearch 5.7.1.Final)。 我对字符串排序有问题。我的应用程序的语言带有变音符号,它们具有特定的字母顺序。例如,直接在after之后,在after之后,等等。因此,您应该对字符串进行如下排序: ElasticSearch首先按典型字母排序,然后将所有奇怪的字母移到最后: 我可以为Elasti

  • 我们使用可比接口对ArrayList进行排序,但我如何修改可比接口的CompareTo函数以根据浮点字段对数组列表进行排序,因为该函数返回int。 我试图按用户评级(浮动数据类型)对电影数据进行排序。下面是我创建的类,用于保存通过Json提要从网络调用获得的不同值。

  • 我有一个用类填充的树集。我想让这些按其继承排序,否则,只按其名称的字母顺序(以创建一个恒定的顺序)。但是由于某种原因,如果添加的类的顺序不正确,就会导致类的顺序不正确。 这是我的比较器: 下面是一个测试失败的例子: 排序集的实际值: 我的期望更像是: 我在调试时确实注意到,并非每个项目都相互比较。

  • 问题内容: 我有一个数组数组: 需要按特定顺序进行: 3452342 5867867 7867867 1231233 我将如何去做?我之前已经对数组进行了排序,并阅读了许多其他文章,但它们始终基于比较(即valueA <valueB)。 感谢帮助。 问题答案: 您可以用来精确指示如何对数组进行排序。在这种情况下,可以在比较函数中使用该数组。 下面的示例使用a 使生活更轻松。 这项工作的关键是使要比