Firestore 查询 orderBy 不起作用?

Posted

技术标签:

【中文标题】Firestore 查询 orderBy 不起作用?【英文标题】:Firestore query orderBy not working? 【发布时间】:2018-12-28 06:31:00 【问题描述】:

时间戳类型字段进行 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) ...

【问题讨论】:

你能分享一些代码来获得解决方案吗? 【参考方案1】:

我认为您在这里缺少' '_timeStampUTC,所以应该是:

 orderBy('_timeStampUTC', descending: true)

编辑:

此外,您需要确保为toid 和其他_timeStampUTC 创建索引,这是在您尝试按不在您查询位置的属性进行排序时完成的。

【讨论】:

很抱歉。那是我凭记忆打字的错字。我已经纠正了这个问题。谢谢。 嗯好的,那么,您是否尝试为_timeStampUTC 创建an index? 刚刚尝试了 '_timeStampUTC' 字段上的索引 - 没有运气。谢谢。 抱歉,我对 Dart 不太擅长,我正在查看 their docs,一切看起来都正确...我看你不是 the only one with this problem,但他们解决它的方式是通过创建索引 我再次尝试您的想法。经过一番挖掘,我发现您必须将索引放在 where 字段和 orderBy 字段【参考方案2】:

_timeStampUTC 使用@ServerTimestamp 注释并尝试通过查询来订购

为了让 Firestore 自动生成 Timestamp 值,当我们 上传数据到数据库,一定要使用注解 @ServerTimestamp 并将值设置为 null。

【讨论】:

【参考方案3】:

是的,它只是缺少一个索引。如果您使用的是 firestore.indexes.json 然后添加:


  "collectionId": "messages",
  "fields": [
     "fieldPath": "toid", "mode": "ASCENDING" ,
     "fieldPath": "_timeStampUTC", "mode": "DESCENDING" 
  ]

【讨论】:

【参考方案4】:

写下你的查询:-

Firestore.instance.collection('messages').where('toid',isEqualTo: _emailID).orderBy('_timeStampUTC', descending: true).getDocuments()

在此之后,将在您的日志中生成一个链接。它会像这样https://console.firebase.google.com/v1/r/project...........。 在创建索引后,点击该链接为您的查询创建索引重新加载您的应用程序,现在您将能够获取所有集合。 :)

【讨论】:

【参考方案5】:

对于那些仍然面临问题并且不知道如何添加索引的人

点击 Firebase 控制台中的添加索引: Cloud Firestore indexes 部分: 您需要添加集合 id、字段和查询范围并创建索引。建立索引需要一些时间。

在字段上添加索引后,您将在下方显示启用状态

【讨论】:

以上是关于Firestore 查询 orderBy 不起作用?的主要内容,如果未能解决你的问题,请参考以下文章

SwiftUI Firestore 查询游标分页不起作用

LINQ 查询添加 orderby 使 Skip 和 Take 不起作用 Linqpad

我可以使用 where equals 子句和 orderby 查询 Cloud Firestore 集合吗?

Firestore查询结果无效

Cloud Firestore 使用查询进行不区分大小写的排序

如何在firestore中使用!=进行查询