Firestore查询顺序不起作用?

时间:2018-07-20 02:17:23

标签: firebase google-cloud-firestore flutter

在类型时间戳记字段上带有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) ...

enter image description here

4 个答案:

答案 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...........。 在创建索引后,按照该链接为您的查询创建索引,重新加载您的应用程序,现在您将能够获取所有集合。 :)