> 웹 프론트엔드 > JS 튜토리얼 > NgSysV: Firestore CRUD 템플릿

NgSysV: Firestore CRUD 템플릿

Linda Hamilton
풀어 주다: 2024-12-04 05:31:15
원래의
946명이 탐색했습니다.

NgSysV: Firestore CRUD templates

이 게시물 시리즈의 색인은 NgateSystems.com에 있습니다. 거기에서 매우 유용한 키워드 검색 기능도 찾을 수 있습니다.

최종 검토일: 2024년 11월

소개

Firestore CRUD(생성, 읽기, 업데이트, 삭제) 지침에 대한 Google의 광범위한 온라인 문서는 일상적으로 사용하기에는 너무 자세할 수 있습니다. 다음은 가장 중요한 Firestore 기능을 위한 템플릿입니다. 그대로 잘라내어 붙여넣은 다음 변수 이름의 "my"라는 단어를 대상으로 하는 컬렉션 이름의 적절한 축약형으로 바꾸는 것이 좋습니다. 예를 들어 "Lecture_events"라는 컬렉션에 대한 참조는 "lecEvtsCollRef"로 코딩될 수 있습니다.

문서 만들기

자동 생성 ID가 있는 myDocData 개체가 포함된 문서를 생성하려면:

let myDocData =  .... create an object containing your data item properties .....
const myCollRef = collection(db, "myCollectionName");
const myDocRef = doc(myCollRef);
await setDoc(myDocRef, myDocData);
로그인 후 복사
로그인 후 복사

혼란스럽게도 '데이터 추가'에 대한 Google 문서에서는 setDoc 대신 addDoc 함수를 참조합니다. setDocis가 선호되는 이유에 대한 조언은 아래 포스트스크립트를 참조하세요.

위의 코드 조각에서 myDocRef= 문은 자동 ID가 할당되는 지점입니다. 할당된 값을 찾아야 하는 경우 myDocRef.id에서 찾을 수 있습니다. 이 점에 대한 자세한 내용은 아래 포스트스크립트를 다시 참조하세요.

데이터 항목을 식별자로 사용하여 문서를 생성하려면:

let myDocData =  .... create a data object  ..... 
let myDocumentIdentifier = .... create your identifier ....
const myDocRef = doc(db, "myCollectionName", myDocumentIdentifier)
await setDoc(myDocRef, myDocData);
로그인 후 복사
로그인 후 복사

문서 읽기

문서 ID를 사용하여 개별 문서를 검색하려면:

const myDocRef = doc(db, "myCollectionName", myDocId);
const myDoc = await getDoc(myDocRef);  
if (myDoc.exists()) {
  console.log("Document data:", myDoc.data());
} 
로그인 후 복사
로그인 후 복사

선택 및 정렬 기준에 따라 선택 문서를 검색하려면(예):

const myCollRef = collection(db, "myCollectionName");
const myQuery = query(myCollRef, where("myField1Name", "==", myField1Value), orderBy("myField2Name", "asc"));
const mySnapshot = await getDocs(myQuery);
mySnapshot.forEach((myDoc) => {
  console.log(myDoc.id, " => ", myDoc.data());
});
로그인 후 복사
로그인 후 복사

스냅샷의 forEach 내에서 문서의 데이터는 myDoc.data()로 사용할 수 있으며, 문서의 docRef는 myDoc.ref이고 해당 docId는 myDoc.id입니다. 선택 기준과 일치하는 문서의 존재를 확인하는 데 관심이 있는 경우 유용한 방법은 0이 아닌 mySnapshot.size를 확인하는 것입니다.

스냅샷 배열의 개별 문서를 참조하려는 경우 mySnapshot.docs[n].data()에서 n번째 항목에 대한 데이터를 찾고 mySnapshot.docs[n]에서 해당 ID를 찾을 수 있습니다. 아이디

orderBy 필드를 지정하지 않으면 문서가 docId의 오름차순으로 반환됩니다. 그리고 두 개 이상의 where 필드를 포함하는 경우 (복합) 인덱스를 생성해야 합니다. 여기서는 브라우저 검사 도구가 도움이 될 것입니다. "색인 필요" 오류 메시지에 있는 링크를 따라가기만 하면 됩니다. 개별 필드는 Firestore 데이터베이스에서 자동으로 색인이 생성됩니다.

컬렉션에 있는 모든 문서를 검색하려면:

const myCollRef = collection(db, "myCollectionName");
const myQuery = query(myCollRef);
const mySnapshot = await getDocs(myQuery);
mySnapshot.forEach((myDoc) => {
  console.log(myDoc.id, " >= ", myDoc.data());
});
로그인 후 복사
로그인 후 복사

Firestore 비교 연산자는 "==", ">"입니다. , "<", "<=", ">=" 및 "!=" 및 흥미로운 배열 멤버십 연산자.

컬렉션의 계층에 있는 모든 문서를 검색하고 그런 다음 다음 작업을 수행합니다.

다단계 컬렉션 계층 구조 처리가 완료된 특정 작업을 수행하려면 주의해야 합니다. 코드에 각각 wait 명령이 포함된 중첩된 foreach 문이 많이 포함되어 있는 경우 전체 세트가 완료되었을 때 알려주는 개별 wait에 의존할 수 없습니다. 각 개인이 기다리는 것은 별도의 스레드를 차지하며 도움이 되는 방식으로 서로 직접 통신하지 않습니다.

이 문제를 해결하는 한 가지 방법은 스냅샷에 forEachs 대신 기존 for 루프를 사용하는 것입니다. 다음은 작업을 수행하기 전에 하위 컬렉션의 모든 어린이를 대상으로 하는 예입니다

let myDocData =  .... create an object containing your data item properties .....
const myCollRef = collection(db, "myCollectionName");
const myDocRef = doc(myCollRef);
await setDoc(myDocRef, myDocData);
로그인 후 복사
로그인 후 복사

여기서 엄격한 순서에 따라 수행되는 대기를 신뢰할 수 있으며, 루프의 끝에 도달하면 자신 있게 종속 작업을 수행할 수 있다는 것을 알 수 있습니다. 그러나 이로 인해 발생하는 성능 저하가 클 수 있으므로 다음 배열에 관심이 있을 수 있습니다.

forEach 루프의 대기에 의해 시작된 개별 약속을 배열에 저장하여 처리할 수 있습니다. 그런 다음 이 배열에 wait Promise.all 명령을 적용하여 모든 멤버 약속이 언제 완료되는지 확인할 수 있습니다. 여기에서 모든 상황에 맞게 간단한 템플릿을 제공하는 것은 불가능하지만 다음은 광범위한 원칙을 보여주는 "스케치"입니다.

여기서 두 개의 별도 컬렉션(상위 및 하위)을 포함하는 2단계 계층 구조는 공통 parentId 필드로 연결됩니다. 집계 분석을 허용하기 위해 두 컬렉션을 메모리로 읽어옵니다. 모든 어린이가 책을 읽었을 때만 가능합니다.

let myDocData =  .... create a data object  ..... 
let myDocumentIdentifier = .... create your identifier ....
const myDocRef = doc(db, "myCollectionName", myDocumentIdentifier)
await setDoc(myDocRef, myDocData);
로그인 후 복사
로그인 후 복사

문서 업데이트

예 - 문서의 myDocData 콘텐츠에서 myField 속성 값을 변경하려면

const myDocRef = doc(db, "myCollectionName", myDocId);
const myDoc = await getDoc(myDocRef);  
if (myDoc.exists()) {
  console.log("Document data:", myDoc.data());
} 
로그인 후 복사
로그인 후 복사

예 - myDocId 문서의 전체 콘텐츠를 myField 속성만 포함하는 새 개체로 대체

const myCollRef = collection(db, "myCollectionName");
const myQuery = query(myCollRef, where("myField1Name", "==", myField1Value), orderBy("myField2Name", "asc"));
const mySnapshot = await getDocs(myQuery);
mySnapshot.forEach((myDoc) => {
  console.log(myDoc.id, " => ", myDoc.data());
});
로그인 후 복사
로그인 후 복사

위 예의 {myField: myFieldValue} 비트를 변경하려는 필드가 포함된 객체로 대체하여 여러 필드에 동시에 변경 사항을 적용할 수 있습니다.

문서 삭제

const myCollRef = collection(db, "myCollectionName");
const myQuery = query(myCollRef);
const mySnapshot = await getDocs(myQuery);
mySnapshot.forEach((myDoc) => {
  console.log(myDoc.id, " >= ", myDoc.data());
});
로그인 후 복사
로그인 후 복사

트랜잭션 내 CRUD 작업

트랜잭션 내부에서 위에 소개된 패턴은 변경되지 않지만 setDoc 명령은 다음과 같이 수정됩니다.

runTransaction(db, async (transaction) => { ... }).catch(); 내에서 기능:

  • getDoc은 transaction.get()으로 대체됩니다.
  • setDoc은 transaction.set()으로 대체됩니다.
  • deleteDoc은 transaction.delete()로 대체됩니다.

후기

  1. 위에서 언급했듯이 Google에서는 setDoc()과 동시에 문서 생성 및 업데이트를 위한 addDoc() 및 updateDoc() 함수를 제공합니다. 그러나 setDoc이 두 작업을 모두 수행할 수 있으면 이는 불필요하게 혼란스러워 보입니다. 또한 거래의 경우 addDoc()은 자동 ID가 있는 문서를 생성하는 데에만 사용할 수 있습니다. 실제로는 어디에서나 setDoc을 사용하는 것이 더 간단해 보입니다.

  2. Firestore 문서 식별자를 생성하는 doc(myCollRef) 호출에는 wait가 없다는 것을 눈치채셨을 것입니다. 이는 Firestore가 실제로 컬렉션을 방문하거나 이미 사용 중인 항목을 확인하지 않고도 이 작업을 수행할 수 있음을 알려줍니다. 이를 어떻게 관리하는지 궁금하다면 StackOverflow의 토론을 확인해 보세요.

Google 문서 참조

  • Cloud Firestore에 데이터 추가: https://firebase.google.com/docs/firestore/manage-data/add-data

  • Cloud Firestore로 데이터 읽기: https://firebase.google.com/docs/firestore/query-data/get-data

  • Cloud Firestore에서 데이터 삭제: https://firebase.google.com/docs/firestore/manage-data/delete-data

SDK 문서는 다음에서 찾을 수 있습니다.

  • https://firebase.google.com/docs/reference/js/firestore_ 및
  • https://firebase.google.com/docs/reference/js/firestore_.transaction

위 내용은 NgSysV: Firestore CRUD 템플릿의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

원천:dev.to
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
저자별 최신 기사
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿