You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

React Native Firebase iOS端数字数组用array-contains-any查询失效问题

React Native Firebase Firestore 数字数组查询iOS端失效问题

数据库情况

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,Android端返回正常。如果将数据库数组元素改为字符串类型,双端均返回正常。

运行环境

  • 依赖版本:@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'

问题根因

这是@react-native-firebase/firestore v11.x版本和iOS端Firebase SDK 8.0.0的兼容缺陷:数字类型参数在iOS端调用array-contains-any算子时,会被错误转换为字符串类型传递给Firestore服务,无法匹配数据库中存储的数字类型值,Android端无此转换问题。

修复方案

方案1:升级依赖(推荐)

将@react-native-firebase/firestore升级到12.0.0及以上版本,同时将iOS端Podfile中的$FirebaseSDKVersion调整为8.5.0及以上版本,官方已在后续版本修复了该类型转换缺陷。

方案2:统一字段类型为字符串

如果暂时无法升级依赖,可将数据库中selectedJobTypesArr字段存储内容改为字符串类型,查询时传入的jobTypeCodeArr元素也统一转换为字符串,可兼容双端查询逻辑。

方案3:临时兼容处理

不修改存储结构的情况下,对iOS端查询参数做特殊处理即可:

import { Platform } from 'react-native';

// 查询前先处理参数
const queryArr = Platform.OS === 'ios' 
  ? jobTypeCodeArr.map(item => Number(item)) 
  : jobTypeCodeArr;

// 后续查询使用处理后的queryArr
.where('selectedJobTypesArr', 'array-contains-any', queryArr)

内容的提问来源于stack exchange,提问作者bugman

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.12 22:30:02