javascript - 如何使用 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})
}
}
解决方案
在您当前的数据结构中,您无法检查具有特定值的文档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
}
});
推荐阅读
- python - LaunchAgent 脚本无法写入外部驱动器
- jmeter - 如何修复不遍历 CSV 文件的线程?
- php - 试图获取非对象的属性“created_at”
- mysql - 如何从表格列中选择 4 位数字的组合?
- c++ - 为什么T2抛出bad_alloc异常时这段代码会发生内存泄漏
- google-cloud-source-repos - 如何在 AWS 实例中克隆 GCP 云源存储库
- swift - 访问结构内的结构以返回排序数组
- c++ - C++ 在派生类中排除通过基类继承的类
- mysql - 为什么`if(id = max(id),id,id + 1)`在mysql中不能按预期工作
- scala - Scala:为什么 Int 类型列表也包含 String?