从Firebase获取数据,其中包含'array'中的所有指定项

时间:2016-05-05 15:02:14

标签: firebase where

我有这样的结构:

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实现这一目标,还是应该获取所有帖子然后过滤它们?

1 个答案:

答案 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调用后数据不会一直就绪。在回叫中执行所有操作。

Firebase | forEach