如何解决React Native Firebase - 使用 IOS 时,在数字元素数组上使用“array-contains-any”失败
React Native Firebase 以访问 Firestore 数据库
数据库 selectedJobTypesArr 字段是一个数字数组。元素是数字,因为它们直接来自选择列表
操作 . 我有一个函数,它使用 array-contains-any 来匹配 selectedJobTypesArr 中的任何值
export const hasMatchingJobType = (user_id,jobTypeCodeArr) => {
return new Promise((resolve,reject) => {
let foundFlag = false;
firestore()
.collection('profiles')
.where('user_id','==',user_id)
.where('selectedJobTypesArr','array-contains-any',jobTypeCodeArr)
.orderBy('preferredName')
.get()
.then((value) => {
value.docs.map((doc) => {
foundFlag = true;
});
resolve(foundFlag);
});
});
};
为了测试它,我这样称呼它:
const user_id = 'TUJawBQN9ge9qNl1l5Qi320UZXK2';
const jobTypeCodeArr = [101,102,103,104,105];
hasMatchingJobType(user_id,jobTypeCodeArr).then((res) => {
console.log('res ',res);
});
预期行为 使用匹配数据调用时返回 true
实际行为 在 IOS 上返回 false。如果数据库数组元素是数字,array-contains-any 只返回预期结果,Android 而非 IOS。 如果我将数据库元素更改为字符串,android 和 IOS 都会产生预期的结果。
环境 React Native Firebase 访问 Firestore 数据库 版本@react-native-firebase/firestore@11.4.1
Android build.gradle:
ext {
buildToolsVersion = "29.0.2"
minSdkVersion = 21
compileSdkVersion = 30
targetSdkVersion = 30
}
IOS: 包含指令的 podfile $FirebaseSDKVersion = '8.0.0'
解决方法
const jobTypeCodeArr = ['101','102','103','104','105'];
这似乎是一个 strings
数组,但您的 Firestore 文档有一个不同的数字数组。您必须在 where()
中传递一组数字才能获取文档。
const user_id = 'TUJawBQN9ge9qNl1l5Qi320UZXK2';
const jobTypeCodeArr = [101,102,103,104,105];
hasMatchingJobType(user_id,jobTypeCodeArr).then((res) => {
console.log('res ',res);
});
如果您想使用将数字作为字符串的现有数组,那么您还必须在 Firestore 中将数据类型更改为字符串。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。