首页 > 解决方案 > javascript中firestore中的orderBy()

问题描述

我有一个火库结构,例如-

Palettes(collection) --><auto-gen-id1>, <auto-gen-id2> ... --> { colors: [...], createdAt: TIMESTAMP } (each document)

我想使用 onSnapshot() 监听器根据时间戳获取所有数据和顺序,并使用反应钩子将其存储到状态中。如何在下面的代码中使用 orderBy 查询

db.collection('palettes').onSnapshot(snapshot => {
  snapshot.docChanges().forEach(change => {
    if (change.type === "added") {
      setPalette( prevPalette => ([
        { id: change.doc.id, ...change.doc.data() },
        ...prevPalette
      ]))
    }
  })
})

标签: javascriptfirebaseecmascript-6google-cloud-firestore

解决方案


看看文档

你可以做:

db.collection('palettes').orderBy("createdAt", "desc").onSnapshot(snapshot => {
  snapshot.docChanges().forEach(change => {
    if (change.type === "added") {
      setPalette( prevPalette => ([
        { id: change.doc.id, ...change.doc.data() },
        ...prevPalette
      ]))
    }
  })
})

或者

db.collection('palettes').orderBy("createdAt").onSnapshot(snapshot => {
  snapshot.docChanges().forEach(change => {
    if (change.type === "added") {
      setPalette( prevPalette => ([
        { id: change.doc.id, ...change.doc.data() },
        ...prevPalette
      ]))
    }
  })
})

取决于排序方向。


推荐阅读