我有一个包含一系列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);
});
}
答案 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);
});
}
希望这能回答您的问题。