firebase中的重复文档

xe55xuns  于 2023-01-05  发布在  其他
关注(0)|答案(1)|浏览(101)

我想为我上传到firebase集合中的每个图像创建唯一的文档。
这是我创建文档的代码:

import { useState, useEffect } from 'react';
import { projectStorage, projectFirestore, timestamp } from '../firebase-config';

const useStorage = (file) => {
  const [progress, setProgress] = useState(0);
  const [error, setError] = useState(null);
  const [url, setUrl] = useState(null);

  useEffect(() => {
    // references
    const storageRef = projectStorage.ref(file.name);
    const collectionRef = projectFirestore.collection('images');
    
    storageRef.put(file).on('state_changed', (snap) => {
      let percentage = (snap.bytesTransferred / snap.totalBytes) * 100;
      setProgress(percentage);
    }, (err) => {
      setError(err);
    }, async () => {
      const url = await storageRef.getDownloadURL();
      const createdAt = timestamp();
      await collectionRef.add({ url, createdAt });
      setUrl(url);
    });
  }, [file]);

  return { progress, url, error };
}

export default useStorage;

但我得到了两份文件一张照片。
the postthe duplicate post

jvlzgdj9

jvlzgdj91#

每次调用collectionRef.add时,它都会创建一个具有唯一ID的新文档。如果希望集合中的某些内容是唯一的,最好使用该值作为该集合中的文档ID,并基于该ID设置文档,而不是每次都添加一个新文档。
例如:

await collectionRef.doc(new firebase.firestore.FieldPath(url)).set({ url, createdAt });

现在URL用于标识文档,因此根据定义,每个唯一的URL只有一个文档。
另见:

相关问题