Firebase 等于动态嵌套子项
Firebase equalto dynamic nested child
结构为
/archive: {
$userId: {
$archiveKey: {
foo: 1
},
...
},
...
}
其中 $userId
引用 user id
并且 $archiveKey
是动态的,由 .push()
创建。
是否可以查询 archive
ref 并获取所有 archiveObjects
其中 foo = 1
?或者我是否需要获取整个 table,手动挖掘 $userId
并提取我正在寻找的 archiveObjects
?
Firebase 查询现在可以查询嵌套路径,但路径不能是动态的。
因此,如果您知道 uid,则可以通过以下方式查询该用户的档案:
ref.child(authData.uid).orderByChild('foo').equalTo(1).on(...
如果您不知道 uid,则必须创建一个允许您进行查找的数据结构:
archive_category_to_uids: {
foo: {
1: {
uid1: true,
uid2: true
}
}
}
一种更常见的方法是将档案分成它们自己的顶级列表,并让用户和类别都引用它:
users: {
userId1: {
archiveKey1: true,
...
},
...
},
archives: {
archiveKey1: {
foo: 1,
uid: uid1
},
...
},
archiveCategories: {
foo: {
1: {
archiveKey1: true,
archiveKey2: true
}
}
}
现在您可以通过以下方式找到档案:
ref.child('archiveCategories/foo/1').once('value', function(keys) {
keys.forEach(function(key) {
ref.child('archives').child(key.key()).once('value', function(snapshot) {
console.log(snapshot.val());
});
};
});
这个过程称为非规范化,在 NoSQL 数据库中很常见。您正在为您的应用程序需要如何使用它的数据建模。有关此模式和其他常见模式的更多信息,我建议阅读此 article on NoSQL data modeling.
结构为
/archive: {
$userId: {
$archiveKey: {
foo: 1
},
...
},
...
}
其中 $userId
引用 user id
并且 $archiveKey
是动态的,由 .push()
创建。
是否可以查询 archive
ref 并获取所有 archiveObjects
其中 foo = 1
?或者我是否需要获取整个 table,手动挖掘 $userId
并提取我正在寻找的 archiveObjects
?
Firebase 查询现在可以查询嵌套路径,但路径不能是动态的。
因此,如果您知道 uid,则可以通过以下方式查询该用户的档案:
ref.child(authData.uid).orderByChild('foo').equalTo(1).on(...
如果您不知道 uid,则必须创建一个允许您进行查找的数据结构:
archive_category_to_uids: {
foo: {
1: {
uid1: true,
uid2: true
}
}
}
一种更常见的方法是将档案分成它们自己的顶级列表,并让用户和类别都引用它:
users: {
userId1: {
archiveKey1: true,
...
},
...
},
archives: {
archiveKey1: {
foo: 1,
uid: uid1
},
...
},
archiveCategories: {
foo: {
1: {
archiveKey1: true,
archiveKey2: true
}
}
}
现在您可以通过以下方式找到档案:
ref.child('archiveCategories/foo/1').once('value', function(keys) {
keys.forEach(function(key) {
ref.child('archives').child(key.key()).once('value', function(snapshot) {
console.log(snapshot.val());
});
};
});
这个过程称为非规范化,在 NoSQL 数据库中很常见。您正在为您的应用程序需要如何使用它的数据建模。有关此模式和其他常见模式的更多信息,我建议阅读此 article on NoSQL data modeling.