Как я могу получить конкретные объекты, которые содержат определенную строку - PullRequest
0 голосов
/ 05 мая 2019

У меня есть база данных, которая содержит серию объектов 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 ]

2 голосов
/ 05 мая 2019

нашел решение, спасибо тем, кто нашел время, чтобы прочитать мой пост.

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 голос
/ 05 мая 2019

База данных 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);
    });
}
0 голосов
/ 05 мая 2019

Попробуйте, получится строка внутри 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);
    });
}

Надеюсь, это ответит на ваш вопрос.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...