- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我有一个这样的数据路径
events
-KntTJCVBtbrb79dHemC
dateStamp: 1498747689858
admin: "rPxwIzEtJaRbEH6ujkP5QJgpHDp2"
attending:
rPxwIzEtJaRbEH6ujkP5QJgpHDp2: true
MtaPwHEKMEOTXBRdXBuXuS3gst12: false
我想获取有特定用户参加的 Activity 。换句话说,我想获取键“attending/[some-user-id]”存在的所有事件。
问题是我只能通过按该路径的特定值(true 或 false)进行过滤来完成此操作,如下所示:
eventsRef.orderByChild("attending/" + user.getId()).equalTo(true).addListenerForSingleValueEvent(...)
这有效,但仅适用于键值为 true 的情况,因此为了获得我需要的内容,我必须执行 2 次调用,一次调用当值 true 时,一次调用当 value 为 false 时。
我尝试使用 startAt(true) 和 endAt(false) (反之亦然),但最终什么也没返回。
我不确定我错过了什么。
编辑
我应该指定我知道这可以通过非规范化并使用另一个节点作为关系“表”来完成,我只是想知道上述情况是否可能,因为它已经如此接近并且可以避免 2-首先获取 key ,然后检索实际数据的步骤过程。
最佳答案
这就是数据非规范化发挥作用的时候!
您所描述的是查询孙子的唯一方法。当然,正如您提到的,它不是很直观、有用或快速。
您要做的就是为参加给定 Activity 的用户创建一个单独的节点。您可以将其命名为UsersAttendingTheEvent
。这将具有作为子项的事件键。每当用户开始参加给定事件时,请将用户 key 添加为事件 key 的子项(因此是 UsersAttendingTheEvent
的孙子。
例如,
UsersAttendingTheEvent:{
-KntTJCVBtbrb79dHemC:{
rPxwIzEtJaRbEH6ujkP5QJgpHDp2: true
MtaPwHEKMEOTXBRdXBuXuS3gst12: false
}}
现在,当您想要运行查询时,只需对 UsersAttendingTheEvent
运行一个简单的 orderByChild(userId)
查询即可获取该事件的所有键。用户正在参加。
接下来,您可以从主 event/eventKey
获取事件详细信息。这可能看起来像是一个额外的调用,但这就是 Firebase 数据非规范化的设计方式。另外,它的运行速度相当快。
编辑
您的 startAt(true
) 和 endAt(false)
没有返回任何内容的原因是,当调用 orderByChild()
时,订单返回的项目如下:-
本页提到了这一点https://firebase.google.com/docs/database/android/lists-of-data .
尝试仅使用startAt(true)
。如果您确保您的成员键只有 true 或 false 值,并且在 true
之后不会按字典顺序返回其他值,那么这将起作用。
关于java - Firebase - 按(孙) child 的存在进行查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44860604/
file.xml 示例。 我更喜欢使用elementtree来解析。根节点获取为 tree=xml.etree.El
有什么好的方法可以直接将 SIGUSR 发送给孙子?例如。我有一些进程树: 0 / \ 1 2 \ 3 并且需要从0发送一个信号到3。 我
我正在使用lxml ,使用html库的模块。 如何获取包含具有某些特征的元素的元素? 例如: Welcome other Bye Bye another 如何选择 包含 Wel
我将直接切入,简短且具有描述性: C++、Windows API 我正在使用 CreateProcess 创建子进程以运行外部(命令行)应用程序。我已经建立了超时,如果到那时子进程还没有返回正常执行,
我有一个 XML 需要解析,这对我来说非常棘手。 1234 FOO ... 我想遍历此 XML 并在 b
我有一个父 div,单击它会显示一个子 div,再次单击父 div 将切换该子 div 并再次隐藏它。我在那个子 div 中有一个开关切换,它将在场景后面用作复选框。我的代码的问题是,当我点击那个开关
我有一个这样的数据路径 events -KntTJCVBtbrb79dHemC dateStamp: 1498747689858 admin: "rPxwIzE
我正在寻找一种将属性更改事件从孙子级传播到其父级的正确方法。假设我们有一些树结构,当其中一个叶子的某些属性发生变化时,应该通知这棵树的根。我想,一种方法是将属性更改监听器从节点添加到其子节点,然后将事
我有一个 Bash 脚本(Bash 3.2,Mac OS X 10.8)可以并行调用多个 Python 脚本,以便更好地利用多个内核。每个 Python 脚本都需要很长时间才能完成。 问题是,如果我在
我有一个名为 Device 的对象。 Device 可以有一个父 Device。一个 Device 也可以有 n 个子 Devices。 我有一个下拉列表,其中显示了所有可选择的设备。我可以很容易地获
我正在尝试使用此 cron 作业每隔一周运行一个脚本。 (/ect/crontab) 45 8 * * mon root expr `date +%U` % 2 >/dev/null || /home
我正在从事 Backbone/Marionette 项目。该项目实现了一种在从服务器加载数据后将数据缓存在本地内存中的方法。因此,可以在项目内随时随地访问数据。 这让我想知道在我的案例中填充数据以查看
我是一名优秀的程序员,十分优秀!