【问题标题】:React Native Firebase - using "array-contains-any" on array of number elements fails when using IOSReact Native Firebase - 使用 IOS 时在数字元素数组上使用“array-contains-any”失败
【发布时间】:2021-09-21 00:53:01
【问题描述】:

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'

【问题讨论】:

    标签: swift react-native google-cloud-firestore react-native-firebase


    【解决方案1】:

    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 中将数据类型更改为字符串。

    【讨论】:

    • 抱歉,粘贴的测试数据版本错误。确实是数字
    猜你喜欢
    • 1970-01-01
    • 2021-11-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-04
    相关资源
    最近更新 更多