iOS firebase-database查询

时间:2017-02-14 16:12:31

标签: ios objective-c firebase firebase-realtime-database

我有events数组。对于每个事件artist都有id="?"。在x事件中可以找到一个艺术家ID。我想找到所有具有给定id的艺术家的事件。

到目前为止,我尝试过:

[[[[[[FIRDatabase database] reference] child:@"events"] 
                                       queryOrderedByChild:@"artist"] 
                                       queryEqualToValue:artist.uid 
                                       childKey:@"id"] 
    observeEventType:FIRDataEventTypeValue 
    withBlock:^(FIRDataSnapshot * _Nonnull snapshot) {

    }
];

但我做错了什么。下图显示了层次结构 提前谢谢。

enter image description here

1 个答案:

答案 0 :(得分:0)

queryEqualToValue:artist.uid并没有按照您的想法行事。它返回VALUE等于artist.uid的记录。这意味着如果artist.uid1,则会返回值为1的记录。不是具有值为15的ID字段的记录。整个值为1的记录。如同,记录不能是对象,它必须是具有该值的实际数字。

Firebase不提供"其中"机制,允许您查询某些字段等于某个值的艺术家。这个函数调用名称有点令人困惑,但它不是为了这个目的。如果您想要实现您正在做的事情,您需要重新构建数据,以便艺术家的ID是实际参考的一部分,例如:

/events:
    /by-artist:
        /1:
            /0: { event details... }

也就是说,您需要将艺术家ID作为实际路径结构的一部分,以便您检索/events/by-artist/ARTISTID/EVENTID。 Firebase中的标准做法是将主要事件数据存储在主集合中,如/events/EVENTID,然后是子集合中的ID集合。如果数据已更改,这将阻止您必须双倍更新多个位置。