-
파이어베이스 도큐먼트 id 자동생성파이어베이스 2021. 11. 3. 15:01
파이어스토어에서 문서의 유니크id를 얻으려면
String docsUid = await _db
.collection('posts')
.add(post.toMap() as Map<String, dynamic>)
.then((docs) => _db.collection('posts').doc(docs.id).id);이런식으로 문서를 insert후에 해당 문서의 id값을 가져와도 되지만,
어떠한 이유로 문서 add가 되지 않을시, 해당 문서id를 가져올 수가 없고, 그문서와 문서id에 영향받게되는
일련의 작업들이 있다면 오류를 발생시킬 수있으므로 좋은 방법이 아니다.
때문에 미리 지정된 id를 사용하는게 좋고, 그래야 쓰기과정부터 batch 작업단위에 포함시킬 수 있다.
입력하기 전에 미리 생성할 수도 있다.
DocumentReference documentRef = _db.collection('posts').doc();
--> 이렇게 하면 자동생성된 문서의 id값을 미리 documentRef 에 담을 수 있다.
트랜잭션 처리나 일괄쓰기 Batch 이용시, 아직 생성되지않은 게시글에 대해 처리할때
이렇게 미리 자동생성해서 할당하는 방법이 있다.
writeBatch.set(documentRef, post.toMap() as Map<String, dynamic>);
writeBatch.update(documentRef , {'postUid': documentRef});
writeBatch.commit().catchError((onError) {
l.info(this, 'writeBatch.commit catchError >> ');
l.info(onError, 'writeBatch.commit Exception >> ');
});==> 이런식으로 일괄쓰기를 수행하면, 문서가 입력되고, 입력된 문서에 set이나 update되는 작업 중 1개라도 수행되지않으면
catchError 에 걸리게 되고 수행이 되지 않는다. 전체작업이 1개의 원자성을 갖게된다.
'파이어베이스' 카테고리의 다른 글
파이어스토어 해당 값이 있는지 없는지 확인 (0) 2021.11.05