Flutter与Firestore问题:按id排序返回数据为何无序?
问题分析与解决方法
核心问题
你代码里用orderBy("id")是按文档内的数字字段id排序,但打印和收集的是字符串格式的文档ID(如keg:15),出现顺序异常的核心原因大概率是:文档内的数字字段id和文档ID后缀的数字不匹配,或是更新文档时没同步更新该数字字段。
验证步骤
修改代码,同时打印字段id的值和文档ID,确认排序依据的字段值是否符合预期:
Future getKegIds() async { await FirebaseFirestore.instance.collection("kegs").orderBy("id", descending: false).get().then( (snapshot) => snapshot.docs.forEach( (document) { final fieldId = document.data()['id']; final docId = document.reference.id; print('字段id: $fieldId, 文档ID: $docId'); kegIds.add(docId); }, ), ); }
查看输出,确认字段id的数值是否和文档ID后缀数字一致(比如文档ID是keg:15,字段id应为数字15)。
解决措施
- 若字段
id与文档ID后缀数字不匹配:更新对应文档,把数字字段id设置为和文档ID后缀一致的数值。 - 若字段
id数值正确但排序仍异常:检查Firestore是否自动创建了id字段的单字段索引(Firestore默认会为单个字段的orderBy创建索引,若未创建可手动在Firestore控制台的「索引」页面添加)。
内容的提问来源于stack exchange,提问作者Tom Sherlock
相关产品推荐
相关产品推荐

