获取按文档ID在Firestore中降序排序的数据

时间:2017-11-22 14:35:09

标签: android firebase google-cloud-firestore

我希望按documentId按降序排序来自我的Firestore数据库的数据。我打电话的时候:

firestore.collection("users")
    .orderBy(FieldPath.documentId(), Query.Direction.DESCENDING)
    .get()
    .addOnCompleteListener(new OnCompleteListener<QuerySnapshot>() {...});

我收到错误:

  

FAILED_PRECONDITION:查询需要索引。

带有Firebase控制台链接,可自动创建索引。不幸的是,在这种情况下,自动创建似乎并不起作用。当我点击Create Index时,我收到一条消息:

  

__ name__仅支持索引

对于手动索引创建,doc仅说明按字段名称(而不是documentId)进行索引。有谁知道如何从documentId按降序排序的Firestore获取数据?

我知道我可以在客户端重新排序数据,但是通过id排序是一项很自然的任务,我必须遗漏一些东西。谢谢。我用:

compile 'com.google.firebase:firebase-firestore:11.6.0'

2 个答案:

答案 0 :(得分:4)

如Firestore文档here中所述,Cloud Firestore不会对自动生成的docID提供自动排序。

  

重要提示:与&#34;推送ID&#34;不同在Firebase实时数据库中,Cloud Firestore自动生成的ID不提供任何自动排序。如果您希望能够按创建日期订购文档,则应将时间戳存储为文档中的字段。

因此,您可以通过添加额外的字段 createdDate 来实现排序,只需使用annotation @ServerTimestamp进行设置,在用户的类字段之前声明它POJO喜欢这个。

@ServerTimestamp
Date createdDate;

此外,您必须确保在Firestore上编写POJO时此字段为空,在将其保存到Firestore之前不要为其设置任何值。

答案 1 :(得分:-1)

使用此命令可根据ID降序排列:

.collection("jobs")
.orderBy("", "desc")