我希望按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'
答案 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")