首页 > 解决方案 > 如何使用 firestore 检查 id 是否已存在于 React 中?

问题描述

这是我将数据添加到 Firestore 的代码。如何检查集合中是否已存在 idEveniment 字段?如果存在,我不想添加新集合。也许返回错误?

import { firestore } from 'firebase';

// Add Eveniment
export const addEveniment = data => async(dispatch, getState, {getFirestore}) => {
    
    const firestore = getFirestore();
    const userId = getState().firebase.auth.uid;
    dispatch({type: actions.ADD_EVENIMENT_START});
    try {
        const res = await firestore.collection('evenimente').doc(userId).get();
        
        const newEveniment = {
            idEveniment: data.idEveniment, 
            eveniment: data.eveniment,
        }
        if(!res.data()) {
            firestore.collection('evenimente').doc(userId).set({
                evenimente: [newEveniment],
            });
        } else {
            firestore.collection('evenimente').doc(userId).update({
                evenimente: [...res.data().evenimente, newEveniment],
            });
        }
        

        dispatch({type: actions.ADD_EVENIMENT_SUCCESS});
        return true;
    } catch(err) {
        dispatch({type: actions.ADD_EVENIMENT_FAIL, payload: err.message})
    }
        
}

Firestore 集合

标签: javascriptreactjsgoogle-cloud-firestore

解决方案


在您当前的数据结构中,您无法检查具有特定值的文档idEveniment。您可以使用array-contains检查数组成员资格,但前提是您指定idEveniment eveniment的组合。

如果您希望能够仅检查 的值idEveniment,请考虑idEveniments为每个文档添加一个仅具有该值的字段。然后您可以使用数组array-contains中特定idEveniment值的存在:idEveniments

const evenimentesRef = firebase.firestore().collection("evenimente");
const query = evenimentesRef.where("idEveniments", "array-contains", "376342").limit(1);
query.get().then((snapshot) => {
  if (!snapshot.empty()) {
    ... a document with the value already exists
  }
});

推荐阅读