首页 > 解决方案 > 如何在 Firebase Firestore 中添加验证以防止添加重复的文档 ID

问题描述

我在 Firestore 中手动插入文档 ID,即汽车文档

  //Example Doc
    cars:{
    chasisNumber :{
      chasisNumber:123dfs,
      carName: BMW 
     }
    }
  //Example Doc

在这段代码中,如果我不小心再次添加了相同的底盘号,那么它会覆盖现有的值,这些值存储在现有的底盘号上

import db from "./firebase";

function ShowCars() {
const [chasis, setChasis] = useState("");
const [name, setName] = useState("");


const addCar =(e)=>{
e.preventDefault();
db.collection("cars").doc(chasis).set({
 chasisNumber:chasis, 
  carName:name
 });

}
  return (
    <div>
      <form>
        <input placeholder="chasis No" type="text" onChange={(e)=>{setChasis(e.target.value)} value={chasis}/>
        <input placeholder="Car Name" type="text" onChange={(e)=>{setName(e.target.value)} value={name}/>
        <button type="submit" onClick={addCar}>Add</button>
      </form>
    </div>
  )
}

export default ShowCars;

我想避免传递相同的文档,因此它应该在屏幕上显示一些味精作为警报

标签: javascriptreactjsfirebasegoogle-cloud-firestorereact-hooks

解决方案


如果您想防止底盘编号重复,请按照以下步骤操作:-

  1. 通过机箱编号键检查您的 Db (Firestore) 。

    请检查代码是否方便。

从'./../firebase'导入firebase;//你可以将firebase命名为DB,就像你做eailer一样。

firebase.firestore().collection('cars').where('chasisNumber','==','yourChasisNumber').onSnapshot((snapshot) => {let cars = snapshot.docs.map((doc) = > ({ id: doc.id, ...doc.data() })); 返回汽车;});

  1. 如果它返回一些数据,则使用return关键字打破函数中的控制。
  2. 否则推送您的数据。

这是您可以尝试的更简单的解决方案。


推荐阅读