{
"accounts" : {
"-account1" : {
"email" : "test@example.com",
"name" : "John doe",
"online" : false,
"profilePic" : "example.com/img.png",
"username" : "jonh_doe"
"tokens" : [
"token11111",
"token22222",
"token33333"]
},
"-account2" : {
"email" : "testymctest@example.com",
"name" : "Jane doe",
"online" : false,
"profilePic" : "example.com/img.png",
"username" : "jane"
"tokens" : [
"token44444",
"token55555",
"token66666"]
}
}
}
我的用户数据结构如上,我正在尝试确定-account1是否有一个值为“token11111”的令牌
其他Firebase示例建议使用快照,但我没有找到一个示例,可以深入查看子元素以查找值。
这就是我试过的
firebase.database().ref('accounts/-account1/tokens')
.equalTo(newToken)
.once('value')
.then(function(tokens) {
if (tokens.exists()) {
//Token already exists
}
else{
//Push new token to db
}
});
答案 0 :(得分:3)
当你从Firebase快照中获得一个类似数组的对象时(键是以0开头的数字),你就像常规的JavaScript数组一样处理它:
var ref = firebase.database().ref('/accounts/-account1/tokens');
ref.once('value').then(function(snap) {
var array = snap.val();
for (var i in array) {
var value = array[i]
console.log(value);
if (value == 'whatever') { ... }
}
});
这将迭代并打印每个值。您可以在该循环中查找您喜欢的任何值。或者您可以在JavaScript ES2016中的数组上includes(x)
。