在Firebase中跨子数组搜索

问题描述 投票:0回答:1

我的标题不是很准确,但是我不能说出我遇到的问题。

因此,我正在学习如何使用Firebase和angularfire,并且正在学习如何处理数据。

在我遇到这种类型的数组之前,一切都找到了。

enter image description here

这是我来自Firebase的实时数据库,它是一个历史。

[主数组是它自己的历史记录,它由两个数组(0和1)组成,它引用用户0和用户1的历史记录。

在用户0的数组中,有他的用户ID(_ID),以及两个子数组(0和1),它们表示他所做的级别。

每个子数组都有完成级别的次数,级别的ID(_id),以及包含每次运行级别的数据的很少子数组。

金达复杂!希望您了解我的数据库。我同意我没有关于如何构建数据库的最佳实践。

我的问题是,我正在为我的angularjs应用搜索这种类型的数组。

例如,我正在尝试制作这些变量:

$scope.history
$scope.userHistory
$scope.currentLevelUserHistory
$scope.lastRunCurrentLevelUserHistory

我设法得到了两个第一个变量,但是我不明白为什么我不继续下一个变量。

获取历史记录非常容易,我只是在工厂使用此功能

getHistoriques : function () {
    return historiques;
}

“历史”指的是这里>

var ref = firebase.database().ref().child("historiques");
var historiques = $firebaseArray(ref);

获取userHistory有点棘手。

我创建了此功能

function search(key, array){
    console.log("Searching array with the key : " + key);
    for (var i=0; i < array.length; i++) {
        if (array[i]._id === key) {

            console.log(array[i]);
            return array[i];

        }
        else {

        }
    }
}

并且输出是这样的对象。

enter image description here

但是进入下一步:currentLevelUserHistory。这对我来说是不可能的。我尝试了10种不同的方式,但无法正常工作。

我的最后一次尝试是在搜索功能中重新插入具有级别ID的先前对象的输出。

但是我得到的是“未定义”。

我尝试了很多事情,例如向对象添加[0],添加一堆东西。但是我不知道为什么它不起作用。对我来说,数组和子数组始终相同。

为什么不起作用?这是因为函数的输出正在修改我的数组?

我知道我的问题很长。非常感谢任何有胆识的人。

非常感谢。

第一次编辑:

users
    |
    - userId (according to firebase auth)
        |
        - name : ...
        |
        - surname : ...
        |
        - age : ...
        |
        - allowed levels :
                        |
                        - allowedLevel001 : levelId
                        |
                        - allowedLevel002 : levelId
                        |
                        - allowedLevel003 : levelId
        -...

levelsData
    |
    - levelId
        |
        - level name : ...
        |
        - level description : ...
        |
        - first step
            |
            - step name : ...
            |
            - step desc : ...
            |
            - action needed : ...
            |
            - time : ...
        - second step
            |
            - step name : ...
            |
            - step desc : ...
            |
            - action needed : ...
            |
            - time : ...    
    |
        -...    

levelsRunData
    |
    - userId+levelId
        |
        - run001
            |
            -
            first step result :
                |
                - ...
            second step result :
                |
                - ...   
            |
            -...
        - run002
            |
            -
            first step result :
                |
                - ...
            second step result :
                |
                - ...   
            |
            -...    

我的标题不是很准确,但是我不能说出我遇到的问题。因此,我正在学习如何使用Firebase和angularfire,并且正在学习如何处理数据。一切都找到了,直到我见面...

javascript angularjs firebase firebase-realtime-database angularfire
1个回答
1
投票

我想对您的数据库结构提出一些建议。它们基于我认为是您的用例。我当然完全错了。首先,有几点评论:

© www.soinside.com 2019 - 2024. All rights reserved.