所以我有一个拥有25000个用户的数据库。我需要获取用户的数据,这些数据在他们的帐户中具有某些属性。像这样:
let users = arrayFromObject(await firebase.database().ref('Users')
.orderByChild('transactions')
.once('value').then(r => r.val()).catch(e => console.log(e)));
console.log(users);
users = users.filter(u => {
if (u.transactions) {
return u;
}
});
console.log(users);
这有效。但事实证明,只有630位用户说过财产。如何仅获得拥有transactions
属性的用户?我在考虑类似orderByChild('transactions').exists()
之类的东西,但是据我所知这个功能并不存在。
我如何才能只获取其帐户中具有transactions
字段的用户,并在服务器上对其进行过滤?
答案 0 :(得分:2)
您可以这样做:
let ref = firebase.database().ref("Users");
ref.orderByChild("transaction").on("value", function(snapshot) {
if(snapshot.exists()){
console.log("the user has the transaction property");
}
});
此处快照位于节点Users
处,然后使用snapshot.exists()
,您将能够检索仅具有transaction
属性的所有用户。
您可以将数据库更改为此:
UserTransaction
john : true
peter : true
或这个:
UserTransaction
userId
transaction : true
userId
trasansaction : true
这样,您只检索具有交易属性的用户
答案 1 :(得分:1)
我想这是您需要重新考虑架构并使用非规范化的地方。这样,您可能根本不必进行查询。
https://www.youtube.com/playlist?list=PLl-K7zZEsYLlP-k-RKFa7RyNPa9_wCH2s
答案 2 :(得分:0)
好,我找到了!这就是我所做的:
const users = arrayFromObject(await firebase.database().ref('Users')
.orderByChild('transactions').startAt(1).once('value').then(r => r.val()));