programing

Firestore null이 아닌 곳을 선택합니다.

telebox 2023. 7. 11. 22:50
반응형

Firestore null이 아닌 곳을 선택합니다.

프로젝트를 관리하기 위해 Firebase를 사용하고 있으며 일부 값이 null이 아닌 where 절을 사용하여 쿼리를 만들 수 없습니다.

예:저는 직원들의 컬렉션을 가지고 있습니다.키는 장비 ID이고 값은 색상인 개체로 장비 목록이 있습니다.

user = {
    firstName: 'blabla',
    lastName: 'bloblo',
    equipments: {
        123: 'blue',
        124: 'red'
    }
}

저는 특정 장비를 보유한 직원들을 모두 장비에 넣고 싶습니다.123이라고 하죠.

equipments.123이 null이 아닌 Employees에서 Select *로 전송됩니다.시도해 봤습니다.

firestore.collection('employees').where(`equipments.${equipmentId}`, '!=', null)

하지만 작동하지 않습니다.

저는 그것을 할 수 없을 것 같습니다.저 좀 도와주시겠어요?

2020년 9월 업데이트: v7.21.0에 동일하지 않음(!=) 쿼리!즉, 다음 코드를 사용할 수 있습니다.

firestore.collection('employees').where(`equipments.${equipm‌​entId}`, '!=', null)

이전 답변:

Firestore에 "같지 않은" 연산자가 없습니다.하지만 논리를 보면, 당신이 하려는 것은 다음과 같은 값을 쿼리하는 것입니다.String그리고 아닌nullFirestore에서 String을 전달하면 이 작업을 수행할 수 있습니다.where()기능.

따라서 다음보다 낮은 값을 쿼리할 수 있습니다.\uf8ff유니코드 범위에서 매우 높은 코드 포인트입니다.유니코드에서 대부분의 일반 문자 뒤에 있기 때문에 이 쿼리는 유형의 모든 것을 반환합니다.String:

firestore.collection('employees').where(`equipments.${equipm‌​entId}`, '<', '\uf8ff')

또는 ""보다 높은 값을 간단히 쿼리할 수 있습니다(비어 있음).String):

firestore.collection('employees').where(`equipments.${equipm‌​entId}`, '>', '')

FWIW Firestore 인덱스가 희박하기 때문에 다음과 같은 작업을 수행할 수 있습니다.

firestore.collection('employees').orderBy(`equipments.${equipm‌​entId}`)

또한 해당 필드가 설정된 문서만 얻을 수 있습니다.필드를 명시적으로 설정하는 경우null그러나 데이터베이스에서는 null 값이 먼저 표시되므로 명시적 null 값을 피하려면 다음 작업을 수행할 수 있습니다.

firestore.collection('employees').orderBy('equipments.${equipm‌​entId}').startAfter(null);

: 필드가 문서에 없는 경우 Cloud Firestore는 해당 문서/필드에 대한 인덱스 항목을 만들지 않습니다.

언급URL : https://stackoverflow.com/questions/48479532/firestore-select-where-is-not-null

반응형