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

我试图了解 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"

      }

    }

  }


白衣染霜花
浏览 119回答 1
1回答

Smart猫小萌

因为您已经知道如何从 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)。
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript