【问题标题】:orderByValue of subkey子键的 orderByValue
【发布时间】:2021-08-15 23:11:44
【问题描述】:

我是 firebase 新手,想问一下我如何才能仅检索最新数据,例如添加了最后 5 个活动。

我的数据结构如下:活动将用户 ID 作为键,时间戳作为子键,请参阅:

activities
 |-uid
    |-timestamp
       |-data: {}

例如:

activities
 |-4zDhgv1UEjb3EfZ9XhO2PAHdHYg9
    |-1621608449507
       |-distance: 12.5
    |-1621608957090
       |-distance: 9.75

我想到了一些这样的查询,当然在atm不起作用

firebase.database.ref(`activities`).SUBLEVEL().orderByValue().limitToLast(5);

提前感谢您的帮助!

【问题讨论】:

    标签: javascript firebase firebase-realtime-database timestamp


    【解决方案1】:

    Firebase 查询直接在您查询的路径下处理子节点的平面列表。因此,您运行一个活动查询,它会将其正下方的每个节点视为可能的结果。

    要排序/过滤的值必须位于每个直接子节点下的已知位置。这意味着在您当前的模型中,您只能订购/过滤,

    • 如果您已经知道整个 activities/4zDhgv1UEjb3EfZ9XhO2PAHdHYg9 路径,
    • 或者只想对那里的1621608449507/distance 子路径进行排序/过滤。

    另见:

    【讨论】:

    • 感谢您的回答。似乎我必须改变我的模型才能实现我想要的。只是将时间戳添加为孩子并不能解决问题,因为当调用 firebase.database.ref('activities').orderByChild('timestamp').limitToLast(5); 时,我得到了最后 5 个用户及其活动,而不是我想要的所有用户的最后 5 个活动。您有可以解决我的问题的建议模型吗?
    • 这一切都取决于。如果你想在一个时间戳上搜索所有用户,并且每个用户可以有多个活动,那么你想为每个用户考虑什么时间戳?如果您希望它考虑所有时间戳,您应该将所有用户的所有活动/时间戳存储为一个平面列表。如果您希望它考虑一个特定的时间戳(例如最新的或最快的),您可以将该单个值存储为每个用户的命名属性并对其进行查询。
    猜你喜欢
    • 2021-09-17
    • 1970-01-01
    • 2017-05-18
    • 1970-01-01
    • 1970-01-01
    • 2022-01-10
    • 1970-01-01
    • 2021-10-31
    • 1970-01-01
    相关资源
    最近更新 更多