반응형
Firestore 쿼리 문서 시작끈 포함
파이어스토어 컬렉션을 쿼리하여 특정 문자열로 시작하는 모든 문서를 가져올 수 있습니까?
설명서를 살펴보았지만 이에 적합한 쿼리를 찾을 수 없습니다.
할 수는 있지만 까다롭습니다.원하는 문자열보다 크거나 같고 후속 키보다 작은 문서를 검색해야 합니다.
예를 들어, 필드를 포함하는 문서를 찾는 방법'foo'
을 응시하는.'bar'
다음과 같은 질문을 할 수 있습니다.
db.collection(c)
.where('foo', '>=', 'bar')
.where('foo', '<', 'bas');
이것은 실제로 경로와 일치하는 문서 모음을 검색하기 위해 클라이언트 구현에서 사용하는 기술입니다.현재 사용자 ID로 시작하는 모든 키를 찾는 스캐너에서 후속 키 계산을 호출합니다.
길 길버트가 대답한 것과 같습니다.향상된 기능과 샘플 코드입니다.String.fromCharCode 및 String.charCodeAt 사용
var strSearch = "start with text here";
var strlength = strSearch.length;
var strFrontCode = strSearch.slice(0, strlength-1);
var strEndCode = strSearch.slice(strlength-1, strSearch.length);
var startcode = strSearch;
var endcode= strFrontCode + String.fromCharCode(strEndCode.charCodeAt(0) + 1);
필터 코드는 아래와 같습니다.
db.collection(c)
.where('foo', '>=', startcode)
.where('foo', '<', endcode);
모든 언어 및 유니코드에서 작동합니다.
경고: 소방서의 모든 검색 기준은 대소문자를 구분합니다.
이전 답변을 더 짧은 버전으로 확장:
const text = 'start with text here';
const end = text.replace(/.$/, c => String.fromCharCode(c.charCodeAt(0) + 1));
query
.where('stringField', '>=', text)
.where('stringField', '<', end);
IRL 예제
async function search(startsWith = '') {
let query = firestore.collection(COLLECTION.CLIENTS);
if (startsWith) {
const end = startsWith.replace(
/.$/, c => String.fromCharCode(c.charCodeAt(0) + 1),
);
query = query
.where('firstName', '>=', startsWith)
.where('firstName', '<', end);
}
const result = await query
.orderBy('firstName')
.get();
return result;
}
Dart/Flutter 버전을 찾고 계신 분들은
Kyo의 Java 답변에 대한 크레딧
final strFrontCode = term.substring(0, term.length - 1);
final strEndCode = term.characters.last;
final limit =
strFrontCode + String.fromCharCode(strEndCode.codeUnitAt(0) + 1);
final snap = await FirebaseFirestore.instance
.collection('someCollection')
.where('someField', isGreaterThanOrEqualTo: term)
.where('someField', isLessThan: limit)
.get();
제가 이걸 발견했어요, 이건 완벽하게 작동합니다.startsWith
const q = query(
collection(firebaseApp.db, 'capturedPhotos'),
where('name', '>=', name),
where('name', '<=', name + '\uf8ff')
)
위의 내용이 맞습니다!최신 답변을 드리고 싶어서요!
var end = s[s.length-1]
val newEnding = ++end
var newString = s
newString.dropLast(1)
newString += newEnding
query
.whereGreaterThanOrEqualTo(key, s)
.whereLessThan(key, newString)
.get()
언급URL : https://stackoverflow.com/questions/46573804/firestore-query-documents-startswith-a-string
반응형
'programing' 카테고리의 다른 글
실제로 먼저 병합하지 않고 병합을 테스트하는 방법 (0) | 2023.07.10 |
---|---|
Git 병합 오류 " 병합되지 않은 파일이 있으므로 커밋할 수 없습니다." (0) | 2023.07.10 |
유형 스크립트 결합 유형에서 다른 속성 액세스 (0) | 2023.07.05 |
특정 커밋이 포함된 병합 커밋 찾기 (0) | 2023.07.05 |
정적 클래스에서 사용자 지정 이벤트를 발생시키는 방법 (0) | 2023.07.05 |