在firebase中查询两个具有相关字段和相同值的集合

nr9pn0ug  于 2021-09-23  发布在  Java
关注(0)|答案(1)|浏览(318)

因此,基本上我试图实现的是为每个查询的事件获取参与者文档。请查看发布的图像。两者都有一个需要匹配的公共eventid字段。下面的代码仅适用于第一次迭代,但在getrealtimechild()之前立即停止。events文档有一个id字段

useEffect(() => {

    //Fetch events ordered by timestamp
    const eventsRef = realDB.ref('Events').orderByChild('EventTimestamp').limitToFirst(3);

    setLoader(true);

    eventsRef.on('value', (snapshot) => {
        //var o = 0;
        //var i = 0;
    //Fetch Participants of each events
        snapshot.forEach(function (events) {
            // console.log(events.key)
            // console.log('outer =>'  ,o+=1)

            getRealtimeChild('Participants', 'EventId', events.key).limitToLast(5).get().then(function (snapshot) {
                console.log(events.key)
                snapshot.forEach(function (p) {
                    // console.log('p =>',p.key)
                    // console.log('inner =>'  ,i+=1)

                    participants=[];
                    participants.push(p.val())
                    setParticipantList([])
                    setParticipantList(participants)
                    // console.log(participants)
                    // console.log(participantList)
                })
                eventList.push(Object.assign(events.val(),{id: events.key},{participants:participantList}));

                // console.log(participantList)

            });

        });

        setEventsList(eventList)
        setLoader(false);
        console.log(eventList)

    });

}, [])
0yg35tkg

0yg35tkg1#

你可以使用 equalTo 方法获取特定事件的参与者。

const ref = realDB.ref('Events/Participants')
const snapshot = await ref.orderByChild('EventId').equalTo('<EVENT-ID>').once("value")
console.log(snapshot.val());

您还可以使用 limitToFirstlimitToLast 方法根据您的需要。
MethodDescriptionLimitToFirst设置从有序结果列表开始返回的最大项数。LimitToLast设置从有序结果列表结束返回的最大项数。

相关问题