如何在 MongoDB 中维护有序对象

Posted

技术标签:

【中文标题】如何在 MongoDB 中维护有序对象【英文标题】:How to maintain ordered objects in MongoDB 【发布时间】:2018-12-05 20:19:45 【问题描述】:

所以我有一个名为 stories 的 mongodb 集合,它们每个都有一个索引字段,对应于它们在其他故事中的特定顺序。我希望能够在 GUI 上重新排序这些故事,然后在我的数据库上更新这个排序,但我似乎无法找出最好的方法来做到这一点。 我知道如果故事存储在 LinkedList 数据结构中,这样的事情会很简单,但我不知道如何使用 MongoDB 集合来做到这一点。

作为我所了解的一个例子,比如说我有这个故事集

[
  
    title: 'Story 1',
    index: 0
  ,
  
    title: 'Story 2',
    index: 1
  ,
  
    title: 'Story 3',
    index: 2
  ,
]

我想重新排序列表,使故事 1 在故事 3 之后,然后我在数据库中的结果将是

[
  
    title: 'Story 2',
    index: 0
  ,
  
    title: 'Story 3',
    index: 1
  ,
  
    title: 'Story 1',
    index: 2
  ,
]

如果我想删除故事 3,我会留下

[
  
    title: 'Story 2',
    index: 0
  ,
  
    title: 'Story 1',
    index: 1
  ,
]

作为参考,我正在尝试使用 javascript 和 Mongoose 来实现它

【问题讨论】:

阅读:$sort 【参考方案1】:

您可以使用以下代码来获得预期的结果。

    使用索引对数组进行排序:

model.find( ... ).sort( index: asc).exec(function(err, model) ... );

    删除项目:

您可以使用索引查找特定文档 - 使用 findOne 而不是 find。

【讨论】:

这不是我感到困惑的查询,而是当我需要重新排序和删除之类的事情时如何按顺序维护数据。就像在这些操作期间如何重新调整所有索引一样,因为重新排序或删除不仅会影响单个文档的索引。 查看此链接:***.com/questions/5825520/… 我完全了解如何查询排序列表,我的问题是如何维护所述排序列表,在插入、删除和重新排序故事时更新索引。

以上是关于如何在 MongoDB 中维护有序对象的主要内容,如果未能解决你的问题,请参考以下文章

如何在mongodb中维护用户可自定义的实体顺序?

如何保持代码整洁有序? [关闭]

如何使用带有插入/删除的 Core Data(或 SQL)维护有序表?

如何使用 mongoDb 在单词序列集合中搜索输入单词

是否可以针对特定字段在 mysql 或 mongodb 中按顺序保存数据?

iOS:核心数据:如何在托管对象中保留一组有序的对象