在类型时间戳记字段上带有Firestore查询的FutureBuilder回来时快照中没有数据。但是,没有orderBy的相同查询也可以正常工作。
我想念什么?感谢您的帮助。
// Working code
future: Firestore.instance.collection('messages').where('toid',isEqualTo: _emailID).getDocuments(),
builder: (context, snapshot) ...
// Not Working - returns to if(!snapshot.hasData)
future: Firestore.instance.collection('messages').where('toid',isEqualTo: _emailID).orderBy('_timeStampUTC', descending: true).getDocuments(),
builder: (context, snapshot) ...
答案 0 :(得分:0)
我认为您在'
缺少'_timeStampUTC
,所以应该是:
orderBy('_timeStampUTC', descending: true)
编辑:
此外,您还需要确保为toid
和其他_timeStampUTC
创建一个索引,当您尝试通过不在查询位置的属性进行排序时,就可以完成此操作
答案 1 :(得分:0)
是的,它只是缺少索引。如果您使用的是firestore.indexes.json,则添加以下内容:
{
"collectionId": "messages",
"fields": [
{ "fieldPath": "toid", "mode": "ASCENDING" },
{ "fieldPath": "_timeStampUTC", "mode": "DESCENDING" }
]
}
答案 2 :(得分:0)
为@ServerTimestamp
使用_timeStampUTC
批注,并尝试按查询排序
要使Firestore在我们执行以下操作时自动生成时间戳记值 将数据上传到数据库,必须使用批注 @ServerTimestamp并将其值设置为null。
答案 3 :(得分:0)
编写您的查询:-
Firestore.instance.collection('messages').where('toid',isEqualTo: _emailID).orderBy('_timeStampUTC', descending: true).getDocuments()
此后,在您的日志中,将生成一个链接。它会像这样https://console.firebase.google.com/v1/r/project...........。 在创建索引后,按照该链接为您的查询创建索引,重新加载您的应用程序,现在您将能够获取所有集合。 :)