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

zel*_*g74 12 android firebase google-cloud-firestore

我想从documentId降序排序的Firestore数据库中获取数据.我打电话的时候:

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

我收到错误:

FAILED_PRECONDITION:查询需要索引.

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

仅__name__不支持索引

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

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

compile 'com.google.firebase:firebase-firestore:11.6.0'
Run Code Online (Sandbox Code Playgroud)

Dha*_*sar 6

作为公司的FireStore文件中所述这里,云计算公司的FireStore不提供自动生成的docIDs自动排序。

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

因此,您可以通过添加一个额外的字段createdDate并仅使用批注 @ServerTimestamp 对其进行设置,从而在用户POJO的类字段之前声明它来实现排序。

@ServerTimestamp
Date createdDate;
Run Code Online (Sandbox Code Playgroud)

另外,当在Firestore上写POJO时,必须确保此字段为null,在将其保存到Firestore之前,请勿对其设置任何值。

  • 为什么要说创建日期?问题的作者没有说按时间顺序排列他的文件。 (4认同)
  • @Parziphal,我希望按 ID 排序时按时间顺序随机排序。 (3认同)