【问题标题】:Firestore where filter and add data to the resultFirestore 在哪里过滤并将数据添加到结果中
【发布时间】:2021-05-08 22:44:43
【问题描述】:

我得到了以下代码:

const db = firebase.firestore();
var duettsRef = db.collection("duetts");

    export const keyExists = (setKey)=>{
      duettsRef.where("key", "==", setKey).where("player2", "==", "").get().then(querySnapshot => {
        console.log(querySnapshot);
        if (!querySnapshot.empty) {
            this.db.collection('duett').set
            ({
              player2: firebase.auth().currentUser.uid,
          });
            }
        })
    }

我记录了快照,直到现在它都运行良好。 “键”是唯一的,因此快照要么是空的,要么是找到一个具有此特定属性的文档。 Screenshot of my firestore structure. 什么不起作用,如果快照不为空,我想要编辑找到的文档中的“player2”字段,并将其设置为当前用户 ID。 例如,如果我搜索密钥:2jskmd21,它将在 player2 字段中填写用户 ID:Like this. 我该如何正确地做到这一点?

【问题讨论】:

    标签: reactjs react-native google-cloud-firestore


    【解决方案1】:

    对于这种情况,您需要使用.update() 而不是.set()。这是因为 update 方法旨在更新文档中的值,而 set 需要 merge: true 标志,但其主要功能是在文档不存在时创建文档,这可能会适得其反。

    在此代码中,我按照您的描述设置值,并将限制设置为 1,将仅检索 1 个文档。

    const db = firebase.firestore();
    var duettsRef = db.collection("duetts");
    
        export const keyExists = (setKey)=>{
          duettsRef.where("key", "==", setKey)
           .where("player2", "==", "").limit(1).get()
           .then(querySnapshot => {
            console.log(querySnapshot);
            if (!querySnapshot.empty) {
                querySnapshot.docs[0].ref.update({
                          player2:firebase.auth().currentUser.uid});
                }
            })
           .catch(e => console.log(e));
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-08-18
      • 1970-01-01
      • 2019-10-01
      • 1970-01-01
      • 2022-11-17
      • 2022-12-11
      • 1970-01-01
      相关资源
      最近更新 更多