如何仅从整个集合中获取最后添加的文档。快照

时间:2019-04-13 20:27:00

标签: javascript firebase google-cloud-firestore

我正在尝试仅将最后一个文档添加到特定集合中。阅读文档,我得到以下代码:

db.collection("Orders")
.onSnapshot(function(snapshot) {
    snapshot.docChanges.forEach(function(change) {
        if (change.type === "added") {
            console.log("New order: ", change.doc.data());
        }
        if (change.type === "modified") {
            console.log("Modified order: ", change.doc.data());
        }
        if (change.type === "removed") {
            console.log("Removed order: ", change.doc.data());
        }
    });
});

但是它带来了多个文档。带来一切,因为它的阅读内容都是新的。 为了使上下文,它是一个订单数据库,所以我需要该应用程序监听添加的最后一个订单,而不是全部。 我将非常感谢您的帮助! 谢谢!

1 个答案:

答案 0 :(得分:1)

Firestore没有最新的内置概念,或者至少没有您可以过滤的方式。因此,要允许您检索最新的文档,必须首先为每个文档添加一个时间戳。我建议为此使用服务器端时间戳,例如:

ordersCollection.add({
  ..., // all your other fields
  timestamp: firebase.firestore.FieldValue.serverTimestamp()
});

有了这些,您可以通过排序和限制来获取最新文档:

db.collection("Orders")
.orderBy("timestamp", "desc")
.limit(1)
.onSnapshot(function(snapshot) {
    snapshot.forEach(function(doc) {
        console.log(doc.id, doc.data());
    });
});