您如何在Google Firestore中存储N个项目的有序列表?
例如,待办事项列表。我有几个想法,但似乎都不聪明。
你可以放置一个'的位置'关键项目,但这需要更新所有项目'一个人改变时的位置值。
您可以将它们存储在已排序的数组中,并在持久化之前进行一些拼接。
我很想知道推荐的方法是什么。
答案 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,但您应该能够用其他语言创建类似的内容。