如何检索包含特定字符串的特定对象

时间:2019-05-05 13:40:19

标签: javascript firebase firebase-realtime-database

我有一个包含一系列JSON对象(练习)的数据库,我只想过滤和检索那些具有特定字符串的对象。

下面的我的方法检索所有这些方法,我提供了特定的字符串(pathExercice)作为参数,但是我不确定如何使用它来仅选择包含它的对象。

这是我当前在数据库中拥有的数据的示例。 在这种情况下,如果方法中提供的pathExercice与对象内部的字符串匹配,我想检索该对象

有任何线索吗?谢谢

-Le7BeKeG9Zes6mZ7gUm
      date: 1557063173016
      pathExercice: "DeveloppeCouche"
      reps: 10
      weight: 10
export const readUserData = async (pathExercice) => {
    let userID = firebase.auth().currentUser.uid
    let ref = firebase.database().ref('users/' + userID + '/exercices')
    return ref.once("value").then(snapshot => {
        console.log(snapshot.val());
        return snapshot.val()
    }).catch(err => {
        console.log('error:  ' + err);
    });
}

3 个答案:

答案 0 :(得分:2)

找到了解决方案,感谢那些花时间阅读我的帖子的人。

export const readUserData = async (pathExercice) => {
let userID = firebase.auth().currentUser.uid
let ref = firebase.database().ref('users/' + userID + '/exercices')
return ref.orderByChild('pathExercice').equalTo(pathExercice).once("value")
    .then(snapshot => {
        console.log(snapshot.val());
        return snapshot.val()
    }).catch(err => {
        console.log('error:  ' + err);
    });

}

答案 1 :(得分:1)

Firebase数据库不支持通配符字符串匹配查询,因此您不能使用该数据库搜索包含某个子字符串的pathExercice值。

可以搜索开头的某个特定子字符串的pathExercice,如下所示:

let ref = firebase.database().ref('users/' + userID + '/exercices')
return ref.orderByChild('pathExercice').startAt('Devel').endAt('Devel\uF7FF').once("value").then(snapshot => {

如果您要过滤包含某个子字符串的pathExercice值,则必须在代码中执行此操作。注意,这意味着您将从数据库中读取所有子节点,因此请注意有多少个子节点。

代码应如下所示:

export const readUserData = async (pathExercice) => {
    let userID = firebase.auth().currentUser.uid
    let ref = firebase.database().ref('users/' + userID + '/exercices')
    return ref.once("value").then(snapshot => {
        results = [];
        snapshot.forEach(exercise => {
            if (exercise.child('pathExercice').val().indexOf('Couche') >= 0) {
                results.push(exercise.val());
            }
        }
        return results;
    }).catch(err => {
        console.log('error:  ' + err);
    });
}

答案 2 :(得分:0)

尝试一下,它将获得pathExercise内部的字符串

export const readUserData = async (pathExercice) => {
    let userID = firebase.auth().currentUser.uid
    let ref = firebase.database().ref('users/' + userID + '/exercices')
    return ref.once("value").then(snapshot => {
        console.log(snapshot.val());
        if (snapshot.val().pathExercice === "DeveloppeCouche") {
             //some action here
        }
        return snapshot.val()
    }).catch(err => {
        console.log('error:  ' + err);
    });
}

希望这能回答您的问题。