如何在Google Firestore中存储已排序的列表

问题描述 投票:4回答:2

您如何在Google Firestore中存储N个项目的有序列表?

例如,待办事项列表。我有几个想法,但似乎都不聪明。

您可以在项目上放置“位置”键,但这需要在更改时更新所有项目的位置值。

您可以将它们存储在已排序的数组中,并在持久化之前进行一些拼接。

我很想知道推荐的方法是什么。

google-cloud-firestore sortedlist
2个回答
1
投票

Firestore不会“存储已排序的列表”作为其功能之一。它将使用您定义的文档字段的值构建集合中的文档索引。然后,您可以根据该索引对文档进行排序。您对这些文档字段的处理完全取决于您。如果您需要重新编写值以满足您的预期排序,那么请执行此操作。


1
投票

您可以在Firestore中存储两个列表。一个包含您的实际数据(无序),另一个包含要订购的ID地图。

这是一个Dart示例:

main() {

  List myList = [
    {'id': 'red', 'test': 'some data'},
    {'id': 'green', 'other': 'some other data'},
    {'id': 'blue'},
  ];

  List myOrderList = ['green', 'red', 'blue'];

  List orderByOtherList(List theList, String commonField, List orderList) {
    List listOut = [];
    orderList.forEach((o) => listOut.add(theList.firstWhere((m) => m[commonField] == o)));
    return listOut;
  }

  print(myList);
  print(orderByOtherList(myList, 'id', myOrderList));
}

这是DartPad上的例子:https://dartpad.dartlang.org/dc77acd6e4cfce608796a51cda3ee9ad

然后将这些流与rxdart中的combineLatest2组合在一起,只要列表发生变化,就可以在应用程序中对实际列表进行排序。

此示例使用Dart,但您应该能够在其他语言中创建类似的东西。

© www.soinside.com 2019 - 2024. All rights reserved.