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

当保存为数组时,我如何使Spring数据MongoDB对Java集进行排序?

隗星驰
2023-03-14

我有一个Spring Data MongoDB类型,其中包含一个comparable类型的set(在我的特定案例中为dayofweek)。这在逻辑上是一个集合,因此它在对象中表现为这样的集合。Spring Data MongoDB将集合作为MongoDB数组保存到数据库中。

public class MyType {
    private Set<DayOfWeek> daysOfWeek;

    public Set<DayOfWeek> getDaysOfWeek() { return daysOfWeek; }
    public void setDaysOfWeek(Set<DayOfWeek> d) { this.daysOfWeek = d; }
}

我希望在将对象保存到MongoDB文档时能够使用set元素的自然顺序。理想情况下,我不想强迫类型为排序集,因为除了为了方便而按排序顺序保存类型之外,没有逻辑上的理由需要为一个类型。

如何确保包含无序的对象以排序顺序保存到MongoDB?

共有1个答案

颛孙俊
2023-03-14

按定义没有迭代顺序。“集合”这个名字取自数学术语,意思是不同的无序元素的集合。

如果需要元素按一定顺序迭代,请使用SortedSet或其后继NavigableSet的实现。

注意,您可以在类内部使用排序集,而在与类外的世界交互时使用更通用的set接口。对于setter方法,请接受set对象,然后将其提供给所选navigableSet的构造函数,如treeSet。对于getter方法,返回内部navigableSet的防御性副本,作为set

public class MyType {
    private EnumSet< DayOfWeek > dows ;

    public Set< DayOfWeek > getDaysOfWeek() { return EnumSet.copyOf( this.dows) ; }
    public void setDaysOfWeek( Set< DayOfWeek > d ) { this. dows = EnumSet.copyOf( d ) ; }
}

因为没有逻辑上的理由它需要是一个,除了希望以排序的顺序保存它们以方便。

实际上,希望按排序顺序保存它们确实是指定sortedset/navigableset的一个逻辑原因。我建议导出set的排序品种,而不是set。我写我的答案使用set只是因为您要求使用它。

 类似资料:
  • 我有学生(弦)和老师(弦列表)。我想根据讲师人数按降序提取记录。讲师如下示例:[a、b、c]-3、[e、f]-2、[g、h、i、j]-4。 我要按4,3,2的顺序。 这取决于现场讲师阵列的大小。如何使用mongoTemplate或自定义mongodb查询或聚合进行查询??

  • 我有一个这样的数组- {1, 2, 3, 4, 5, 6} 我想按3的倍数和余数0、1和2的顺序排序。(第一组是3的倍数,第二组是3的倍数和余数1,最后一组是3的倍数和余数2),我想保留元素在数组中出现的顺序。结果应该是{3,6,1,4,2,5} 我有这个密码- 但这段代码并没有保留元素在数组中出现的顺序。我得到的结果是- {3, 6, 1, 4, 5, 2} 但是我希望结果是像{3, 6, 1,

  • 问题内容: MongoDB菜鸟在这里… 好的,我有一个学生集合,每个学生的记录看起来都如下所示:我想按降序对“类型”:“作业”分数进行排序。 mongo外壳上的咒语是什么样的? 我正在尝试这个咒语… 但它不起作用。 问题答案: 您将需要在应用程序代码中或在MongoDB 2.2中使用新的AggregationFramework来操纵嵌入式数组。 Shell中的示例聚合: 样本输出:

  • Hazelcast文档中说明了集群组: 您可以创建群集组。为此,请使用group configuration元素。 通过指定组名和组密码,可以以简单的方式分隔集群。示例分组可以按开发、生产、测试、应用程序等进行。 具有相同组配置(即相同组名和密码)的集群成员(节点)和客户端形成私有集群。 每个集群都有自己的组,不会干扰其他集群。 但没有关于数据分区的详细信息。 如果我有5个节点和2个群集组: no

  • 问题内容: 我的数组不包含任何字符串。但是它包含对象引用。每个对象引用都通过toString方法返回名称,id,作者和发布者。 现在,我需要按名称对对象数组进行排序。我知道如何排序,但是我不知道如何从对象中提取名称并对它们进行排序。 问题答案: 你有两种方法可以使用Arrays实用程序类 实现一个Comparator并将数组与比较器一起传递给sort方法,该方法将其作为第二个参数。 在对象所属的类

  • 问题内容: 该问题旨在作为有关PHP中数组排序问题的参考。容易想到您的特定案例是独特的,值得提出新的问题,但是实际上大多数都是此页面上一种解决方案的细微变化。 如果您的问题作为该问题的重复而被关闭,请仅在您可以解释为什么该问题与以下所有内容明显不同时才要求重新提出您的问题。 如何在PHP中对数组排序? 如何在PHP中对 复杂 数组进行排序? 如何在PHP中对对象数组进行排序? 有关使用PHP现有功