为了账号安全,请及时绑定邮箱和手机立即绑定

如何交叉查询实时 Firebase 数据库?

如何交叉查询实时 Firebase 数据库?

白衣染霜花 2023-03-03 15:05:38
我试图了解 Firebase 中的查询。我想传递 userId A 和 B,看看他们是否订阅了一个共同的 chatId,它会返回 true 或 false。如何查询 userId 并评估我想要的输出的结果?export const checkForExistingChat = (currentUserId, recipient) => {  var IdList = {}  var query = database    .ref(`Chats/${currentUserId}`)    .orderByChild("subscribedToChat")    .once("value", function (dataSnapshot) {      dataSnapshot.forEach(function (childSnapshot) {        const childData = childSnapshot.val();        console.log("childData : ", childData);      });    });};导出聊天的 JSON  "Chats" : {    "61vtPjp8YVVSzpvexwXMgEHghYf1" : {      "subscribedToChat" : {        "1a555cbf-30b7-4c8f-9986-4252a7620c45" : "1a555cbf-30b7-4c8f-9986-4252a7620c45",        "2d718ea7-eafa-48db-af14-f165f07b3b08" : "2d718ea7-eafa-48db-af14-f165f07b3b08",        "2e4fd8bb-4afb-4229-83ec-5a427fe2731d" : "2e4fd8bb-4afb-4229-83ec-5a427fe2731d",        "35c537ef-57dd-48c5-9350-5d1fe2e9d118" : "35c537ef-57dd-48c5-9350-5d1fe2e9d118",        "3a816ac1-6e97-4d66-ae19-77e65f8c2df4" : "3a816ac1-6e97-4d66-ae19-77e65f8c2df4",        }    },    "qqpBNbEa8ZSiCEUlseFeGeiRqzh2" : {      "subscribedToChat" : {        "1a555cbf-30b7-4c8f-9986-4252a7620c45" : "1a555cbf-30b7-4c8f-9986-4252a7620c45",        "35c537ef-57dd-48c5-9350-5d1fe2e9d118" : "35c537ef-57dd-48c5-9350-5d1fe2e9d118"      }    }  }
查看完整描述

1 回答

?
Smart猫小萌

TA贡献1911条经验 获得超7个赞

因为您已经知道如何从 Firebase 加载数据,所以这本质上是一个非 Firebase 问题:在两个键列表中找到重叠的键。


一个快速的代码片段:


var json = {

  "Chats" : {

    "61vtPjp8YVVSzpvexwXMgEHghYf1" : {

      "subscribedToChat" : {

        "1a555cbf-30b7-4c8f-9986-4252a7620c45" : "1a555cbf-30b7-4c8f-9986-4252a7620c45",

        "2d718ea7-eafa-48db-af14-f165f07b3b08" : "2d718ea7-eafa-48db-af14-f165f07b3b08",

        "2e4fd8bb-4afb-4229-83ec-5a427fe2731d" : "2e4fd8bb-4afb-4229-83ec-5a427fe2731d",

        "35c537ef-57dd-48c5-9350-5d1fe2e9d118" : "35c537ef-57dd-48c5-9350-5d1fe2e9d118",

        "3a816ac1-6e97-4d66-ae19-77e65f8c2df4" : "3a816ac1-6e97-4d66-ae19-77e65f8c2df4",

  

      }

    },

    "qqpBNbEa8ZSiCEUlseFeGeiRqzh2" : {

      "subscribedToChat" : {

        "1a555cbf-30b7-4c8f-9986-4252a7620c45" : "1a555cbf-30b7-4c8f-9986-4252a7620c45",

        "35c537ef-57dd-48c5-9350-5d1fe2e9d118" : "35c537ef-57dd-48c5-9350-5d1fe2e9d118"

      }

    }

  }

};

var keys1 = Object.keys(json.Chats["61vtPjp8YVVSzpvexwXMgEHghYf1"].subscribedToChat);

var keys2 = Object.keys(json.Chats["qqpBNbEa8ZSiCEUlseFeGeiRqzh2"].subscribedToChat);


console.log(keys1, keys2);

var commonKeys = keys1.filter(function(key) {

  return keys2.indexOf(key) >= 0;

});

console.log(commonKeys);

这是一种O(n^2)算法,但我怀疑这会影响您可能拥有的列表大小。如果这是一个问题,并且列表已排序,您可以在每个列表中至少保留一个游标,并且只向前移动一次以使其成为一种算法O(2n)



查看完整回答
反对 回复 2023-03-03
  • 1 回答
  • 0 关注
  • 117 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号