我正在使用firebase&firestore和我有一个名为singers
的旧收藏,其中包含一些结构文件,例如
name: string
genre: string,
...
现在,我需要从前端的集合中订购这些文档,并且需要从最旧的到最新的,但如果没有createdAt
这样的字段,我就无法做到这一点,因为firestore不会提供任何关于文档创建时间的信息。
我做了什么
注册时先加了字段createdAt
,现在新创建的歌手有字段createdAt
,但老的没有。所以我想按顺序订购:
- 没有字段
createdAt
的所有歌手,具有随机顺序或任何其他字段 - 字段
createdAt
顺序从最老到最新的歌手
示例数据:
const singers = [
{
name: 'Phil',
genre: 'Pop',
...
},
{
name: 'Bom',
genre: 'Rock',
...
},
{
name: 'Tom',
genre: 'Hiphop',
createdAt: 190000000,
...
},
{
name: 'John',
genre: 'Hiphop',
createdAt: 195000000,
...
},
]
const sortedSingers = orderBy(
singers, // collection with all singers from firestore
[singer => (singer.createdAt?? singer.name)],
['desc'],
);
它以错误的顺序呈现:
- 汤姆
- 约翰
- Bom
- 菲尔
我想这样订购:
- 博姆/菲尔
- Bom/Phil
- 汤姆
- 约翰
如何使orderBy
使没有排序字段的文档位于列表的开头?
我做了这样的事情:
const singerCreatedAt: any = singers.map((singer: Singer) =>
singer.createdAt
? { ...singer, createdAt: singer.createdAt?.toDate() }
: { ...singer, createdAt: new Date(190000000000) },
);
const sortedSingers = orderBy(singerCreatedAt, ['createdAt', 'asc']);