您如何在Google Firestore中存储N个项目的有序列表?
例如,待办事项列表。我有几个想法,但似乎都不聪明。
您可以在项目上放置“位置”键,但这需要在更改时更新所有项目的位置值。
您可以将它们存储在已排序的数组中,并在持久化之前进行一些拼接。
我很想知道推荐的方法是什么。
Firestore不会“存储已排序的列表”作为其功能之一。它将使用您定义的文档字段的值构建集合中的文档索引。然后,您可以根据该索引对文档进行排序。您对这些文档字段的处理完全取决于您。如果您需要重新编写值以满足您的预期排序,那么请执行此操作。
您可以在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,但您应该能够在其他语言中创建类似的东西。