我有events
数组。对于每个事件,artist
都有id="?"
。在x事件中可以找到一个艺术家ID。我想找到所有具有给定id的艺术家的事件。
到目前为止,我尝试过:
[[[[[[FIRDatabase database] reference] child:@"events"]
queryOrderedByChild:@"artist"]
queryEqualToValue:artist.uid
childKey:@"id"]
observeEventType:FIRDataEventTypeValue
withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {
}
];
但我做错了什么。下图显示了层次结构 提前谢谢。
答案 0 :(得分:0)
queryEqualToValue:artist.uid
并没有按照您的想法行事。它返回VALUE等于artist.uid
的记录。这意味着如果artist.uid
为1
,则会返回值为1
的记录。不是具有值为15的ID字段的记录。整个值为1
的记录。如同,记录不能是对象,它必须是具有该值的实际数字。
Firebase不提供"其中"机制,允许您查询某些字段等于某个值的艺术家。这个函数调用名称有点令人困惑,但它不是为了这个目的。如果您想要实现您正在做的事情,您需要重新构建数据,以便艺术家的ID是实际参考的一部分,例如:
/events:
/by-artist:
/1:
/0: { event details... }
也就是说,您需要将艺术家ID作为实际路径结构的一部分,以便您检索/events/by-artist/ARTISTID/EVENTID
。 Firebase中的标准做法是将主要事件数据存储在主集合中,如/events/EVENTID
,然后是子集合中的ID集合。如果数据已更改,这将阻止您必须双倍更新多个位置。