상세 컨텐츠

본문 제목

firebase CRUD with flutter 파이어베스에 접근해서 추가,읽고,업데이트,삭제하는 방법입니다.

firebase

by carecat 2025. 6. 21. 14:58

본문

반응형

[CLOUD FIRESTORE]

 *document 를 이하 '문서'로 칭함

  1.set()

     문서에 데이타를 씀. 존재하는 문서를 덮어씌우거나 새로운 문서를 만듬

  2.add()

     컬렉션에 새로운 문서를 더함. 문서아이디는 자동 생성됨(문서아이디를 지정할수 없슴)

  3.get()

    스냅샷형태로 데이타를 읽음

  3.update()

     기존 문서는 덮어씌우지 않고 특정 필드만 업데이트함

  4.delete()

     문서내에서 지정된 필드나 문서를 삭제함.

  관련 예시는 아래 링크 참조.

반응형

 우선,  cloud firestore 초기화   

db = FirebaseFirestore.instance;

 

 문서추가 : set () 사용, 주의사항: 문서의 ID 를 지정해야함!

db.collection("cities").doc("new-city-id").set({"name": "Chicago"});

 

                 add() 사용,  주의사항: 문서의 ID를 자동으로 했을경우(의미없을경우)

// Add a new document with a generated id.
final data = {"name": "Tokyo", "country": "Japan"};

db.collection("cities").add(data).then((documentSnapshot) =>
    print("Added Data with ID: ${documentSnapshot.id}"));

  중요: Firebase 실시간 데이터베이스의 '푸시 ID'와 달리, Cloud Firestore에서 자동으로 생성한 ID에서는 자동 정렬을 지원하지 않습니다. 생성일에 따라 문서를 정렬하려면 타임스탬프를 문서의 필드로 저장해야 합니다.

 

문서 업데이트: update()

final washingtonRef = db.collection("cites").doc("DC");
washingtonRef.update({"capital": true}).then(
    (value) => print("DocumentSnapshot successfully updated!"),
    onError: (e) => print("Error updating document $e"));

 

문서삭제: delete()

db.collection("cities").doc("DC").delete().then(
      (doc) => print("Document deleted"),
      onError: (e) => print("Error updating document $e"),
    );

 

이외, 서버 타임스탬프: 문서의 필드를 서버 업데이트 수신시점을 추적하는 서버 타임스탬프로 설정 가능

final docRef = db.collection("objects").doc("some-id");
final updates = <String, dynamic>{
  "timestamp": FieldValue.serverTimestamp(),
};

docRef.update(updates).then(
    (value) => print("DocumentSnapshot successfully updated!"),
    onError: (e) => print("Error updating document $e"));

 

출처: 데이터베이스 선택: Cloud Firestore 또는 실시간 데이터베이스  |  Firebase

 

 

읽기(쿼리포함)

 get() 사용해서 갖고올수 있습니다. 

(주의사항:읽어온 객체는 비동기 함수의 결과를 받아오기 때문에 1차적으로 then()함수로 처리해야합니다.)

 

.해당 문서만 읽어오기.

final docRef = db.collection("cities").doc("SF");
docRef.get().then(
  (DocumentSnapshot doc) {
    final data = doc.data() as Map<String, dynamic>;
    // ...
  },
  onError: (e) => print("Error getting document: $e"),
);

 -상기 쿼리에서 컬렉션.도큐먼트 까지 경로를 지정함!

   then() 처리한 이후에는 JsonDocumentsnapshot 형태로 타입이 변환됨.

  data()함수를 통해 각 데이타에 접근이 가능.

 

.컬렉션에서 여러문서 가져오기

db.collection("cities").get().then(
  (querySnapshot) {
    print("Successfully completed");
    for (var docSnapshot in querySnapshot.docs) {
      print('${docSnapshot.id} => ${docSnapshot.data()}');
    }
  },
  onError: (e) => print("Error completing: $e"),
);

 -상기 쿼리에서 컬렉션까지만 지정함.! 이는 컬렉션 이하 모든 도큐먼트에서 쿼리하겠다는 의미.!

  then() 받은 이후 결과는 여러토큐먼트들의 모임으로 for 문을 이용해 각각 도큐먼트들을 접근함.

 

 .서브컬렉션이 존재할때

  컬렉션.도큐먼트.서브컬렉션.도규먼트.필드

db.collection("cities").doc("SF").collection("landmarks").get().then(
  (querySnapshot) {
    print("Successfully completed");
    for (var docSnapshot in querySnapshot.docs) {
      print('${docSnapshot.id} => ${docSnapshot.data()}');
    }
  },
  onError: (e) => print("Error completing: $e"),
);

 -상기 쿼리에서 컬렉션.도큐먼트.서브컬렉션 까지 지정함!

 

.컬렉션 그룹에서 여러문서 갖고오기

 

컬렉션 그룹은 ID가 동일한 모든 컬렉션으로 구성됩니다. 예를 들어 cities 컬렉션의 각 문서에 landmarks라는 하위 컬렉션에 있다면 모든 landmarks 하위 컬렉션이 동일한 컬렉션 그룹에 속합니다. 기본적으로 쿼리는 데이터베이스의 단일 컬렉션에서 결과를 검색합니다. 단일 컬렉션 대신 컬렉션 그룹에서 결과를 검색하려면 컬렉션 그룹 쿼리를 사용하세요.

 

.문서의 하위 컬렉션 나열

 

Cloud Firestore 서버 클라이언트 라이브러리의 listCollections() 메서드는 문서 참조의 모든 하위 컬렉션을 나열합니다.

모바일 또는 웹 클라이언트 라이브러리로는 컬렉션 목록을 가져올 수 없습니다. 신뢰할 수 있는 서버 환경에서 관리 작업의 일부로만 컬렉션 이름을 조회해야 합니다. 모바일 또는 웹 클라이언트 라이브러리에 이 기능이 필요하다면 하위 컬렉션 이름을 예측할 수 있도록 데이터를 재구성하는 것이 좋습니다.

 

출처:https://firebase.google.com/docs/firestore/query-data/get-data?hl=ko&_gl=1*vfes12*_up*MQ..*_ga*MTkwODE2Nzg4My4xNzUyMDYxNjAw*_ga_CW55HF8NVT*czE3NTIwNjE2MDAkbzEkZzAkdDE3NTIwNjE2MDAkajYwJGwwJGgw#node.js_8

반응형

관련글 더보기