javascript - 尝试检查 firebase firestore 文档中的某个字段,但苦于其背后的逻辑

标签 javascript firebase google-cloud-firestore

所以我当前正在使用它来检查用户是否存在文档

let user = firebase.auth().currentUser;
                        let userInfo = db.collection("stripe_customers").doc(user.uid);

如果是的话,它会运行我想要的脚本


userInfo.get().then(function (doc) {
                            if (doc.exists) {

但是,我需要尝试检查某些文档中的字段值,而不是检查特定文档。

例如,我有一个名为“stripe_customers”的集合>,每个用户通过其 UID 都有一个文档>然后该文档内部是集合“charges”>然后“charges”内部是随机数字字符串下的文档,并且例如,字母“89nzVNrfQCOVqogDaGvo”是在他们购买后由 strip 为其费用生成的(如果他们有较旧的费用,则可能有多个,这就是为什么我需要找到最新的一个)>然后在最新的费用文档中,我需要检查“状态”字段,该字段的值为“成功”。这样我就可以检查谁已成功付款,如果他们成功,则会运行我想要的脚本。我对如何实现这一目标感到非常困惑。我知道如何进行基本查询,但这有点复杂。我需要能够确保当前 UID 具有具有该值的字段,以便我可以查看当前 UID 是否已付款以及脚本是否运行,从而设置自定义声明。

这是我尝试执行的操作的数据库存储流程的可视化,这样更容易理解 /image/yO66S.jpg

最佳答案

因此,您希望根据包含时间戳值的 created 字段获取 charges(子)集合中的最新文档,并检查此文档的 status 字段。

以下应该可以解决问题:

const user = firebase.auth().currentUser;
const subCollRef = db.collection("stripe_customers").doc(user.uid).collection("charges");

const query = subCollRef.orderBy('created', 'desc').limit(1);

query.get()
  .then(snapshot => {
    if (snapshot.size > 0 && snapshot.docs[0].data().status === "succeeded") {
         //payment was succeeded, you can "run your script"
    });
  })
  .catch(err => {
    console.log('Error getting documents', err);
  });

关于javascript - 尝试检查 firebase firestore 文档中的某个字段,但苦于其背后的逻辑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60289863/

相关文章:

javascript - 为什么两个$scopes同时更新,重复数据

ios - Xcode 9 beta4/5 : This app was unable to be installed

javascript - 如果在 AngularJS 中允许,则包含 javascript 外部文件

除非刷新,否则 JavaScript 不会加载

javascript - 在 Firebase 中迭代多个子项

firebase - 将 FireBase Analytics 导入 Unity 时出现问题

javascript - 从两个相关集合查询数据的最简洁的解决方案是什么?

java - 如何知道Firestore文档中每个属性的类型?

java - 查询多个字段数组Firestore

javascript - 在循环中使用 $.post()