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

Get data from Firebase which contains all specified items in 'array'

我有这样的结构:

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 就可以实现这一点,还是我应该获取他的所有帖子然后过滤它们?

无论如何,您都必须获取整个 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 遍历所有 post,然后将 post 的名称保存在 key 中,并将数据保存在 childData 中。

childData 看起来像:

- text: 'Lorem ipsum dolor...'
- tags
    - web: true
    - design: true
    - school: true

然后使用常规 JavaScript 遍历 tags 对每个循环进行一些检查。如果找到所有标签或您要检查的任何内容,我建议将 key 存储在数组中。

请记住,Firebase 调用是异步的,数据在 .once 调用后并不总是准备就绪。在回调中执行所有操作。

Firebase | forEach