FireStore에 데이터 저장 & 조회 & 삭제 & 수정
- Firebase를 사용하면 2개의 데이터베이스가 있다
- Realtime DataBase
- Cloud Firestore
- 해당 강의에서는 비교적 최근에 나온 Cloud Firestore를 사용할 예정
- Cloud Firestore는 MongoDB 처럼 NoSQL로 비정형 데이터를 저장할 수 있다.
- 사용하기
- Firebase에서 만든 프로젝트 클릭
- 빌드 → Firestore Database → 데이터베이스 만들기 → 프로덕션 모드에서 시작 → asia-northeast3 (Seoul)
- 컬렉션 시작으로 Collection 생성
- 여기서 잠시 Collection과 Document 에 대해 알아보자!
- Collection 안에 document 형태로 데이터 저장
- Collection: 폴더
- Document: 파일, 문서
- map 자료형으로 Object 형식으로 저장되어 있는 데이터
- Collection ID 작성 후 → 문서 ID 자동 생성 → 필드에 key, 유형 type, 값: value를 넣기
- 이후 데이터를 하나 더 추가 하고 싶다면
- 문서 추가를 클릭 후 데이터 형식에 맞게 추가하면 됨
- 데이터 형식에 맞게 저장하는 이유는 추후에 조회 시 편하게 작업하기 위함.
- 데이터 조회하기
- 사용하고자 하는 dart 파일에 import 와 변수에 담아주기
// firestore 사용
import 'package:cloud_firestore/cloud_firestore.dart';
// firebase의 firestore를 사용시 유용한 함수가 담겨 있음
final firestore = FirebaseFirestore.instance;
getData() async{
var result = await firestore.collection('product').get();
if (result.docs.isNotEmpty){
for (var doc in result.docs) {
print(doc['name']);
}
}
}
- try, catch 문을 사용해 실행 후 안되면 catch로 빼는 처리 방식
getData() async{
try {
var result = await firestore.collection('product').get();
for (var doc in result.docs) {
print(doc['name']);
}
} catch (e) {
print('실패닷!');
}
}
- 데이터베이스에 데이터 저장하기
- 간단하게 .get() → .add( { 저장할 데이터의 map구조 } )로 변경하면 된다.
addData() async{
await firestore.collection('product').add({'name': '상의', 'price': 3000});
}
- 저장도 마찬가지로 에러처리를 위해 try,catch를 사용하면 좋을 듯!
addData() async{
try {
await firestore.collection('product').add({'name': '상의', 'price': 3000});
} catch (e) {
print('저장실패!');
}
}
- 데이터 조회 시 특정 조건에 맞는 데이터만 가져오기
- .where(조건).get() 으로 조건을 작성해주면 된다.
- 만약 가격에 3000인 데이터들을 가져오고자 한다면
- 예전에는 where의 파라미터로 3개를 넣는 것 같은데, 지금은 좀 다른 듯하다.
getData() async{
try {
var result = await firestore.collection('product').where('price', isEqualTo: 3000).get();
for (var doc in result.docs) {
print(doc['name']);
print(doc['price']);
}
} catch (e) {
print('실패닷!');
}
}
- 데이터 삭제
- await firestore.collection('product').doc('도큐먼트ID').delete();
- 데이터 수정
- await firestore.collection('product').doc('도큐먼트ID').update( {수정 데이터 } );
- 그리고 Cloud Firestore의 규칙에 다양한 권한에 대한 규칙을 작성할 수 있다.