如何在Google Firestore

时间:2018-03-15 01:01:05

标签: google-cloud-firestore sortedlist

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

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

你可以放置一个'的位置'关键项目,但这需要更新所有项目'一个人改变时的位置值。

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

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

2 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分: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,但您应该能够用其他语言创建类似的内容。