我有这样的结构:
users
- user1
- name: 'Bob'
- age: 25
- posts
- bobPost1
- text: 'Lorem ipsum...'
- tags
- web: true
- programming: true
- school: true
- bobPost2
- text: 'Lorem ipsum dolor...'
- tags
- web: true
- design: true
- school: true
- bobPost3
- text: 'Sample text...'
- tags
- web: true
- programming: true
我想按标签检索所有Bob的帖子。例如'web'和'school'。结果应该是post1和post2。 是否可以通过firebase实现这一目标,还是应该获取所有帖子然后过滤它们?
答案 0 :(得分:1)
无论如何,您都必须获得整个post
的数据快照,但幸运的是,这并不需要担心很多数据。
var ref = new Firebase("https://docs-examples.firebaseio.com/users/user1/posts");
ref.once("value", function(snapshot) {
// Gets everything under "posts", iterates each post
snapshot.forEach(function(childSnapshot) {
// "bobpost1", "bobpost2", etc
var key = childSnapshot.key();
// Data underneath bobpost#
var childData = childSnapshot.val();
// Iterates through tags
for(i in childData.tags) {
// Do/check something
// If post contains all specified tags, then store key somewhere
}
});
});
您使用forEach
遍历所有帖子,然后将帖子的名称保存在key
内,将数据保存在childData
内。
childData
将如下所示:
- text: 'Lorem ipsum dolor...'
- tags
- web: true
- design: true
- school: true
然后使用常规JavaScript迭代tags
,为每个循环做一些检查。如果找到所有标签或者你要检查的是什么,我建议将key
存储在数组中。
请记住,Firebase调用是异步的,并且.once
调用后数据不会一直就绪。在回叫中执行所有操作。