firebase实时数据库按子值查找节点

Iva*_*hev 3 find firebase firebase-realtime-database

我有以下结构:

root
  -LKMsdf2_Qxbwtv4238D
     details
       uid: john

  -YKMWrmj_QxbwtvSBM5A
     details
       uid: tony

  -R45Wrmj_Qxbf321BMd4
     details
       uid: karina
Run Code Online (Sandbox Code Playgroud)

如何通过其 uid 找到“root”下的 ref 键:

例如:通过 uid:karina 我需要获取参考密钥 -R45Wrmj_Qxbf321BMd4

有没有办法使用一些通配符,例如 /root/{recordid}/details/uid 之类的?

======== 感谢您的提示!====这是我的最终解决方案================

findEntry = function(targetUid) {
var entriesRef = db.ref('root');
return entriesRef.once('value')
    .then((snapshot)=>{
        var id = []; // found id

        snapshot.forEach((childSnapshot)=>{
            var childKey = childSnapshot.key;
            var childData = childSnapshot.val();
            var found = (childData.uid === targetUid);
            if (found) {
                console.log('Found for uid:' + targetUid  + ': ' + childKey);
                id = childKey;
            }
            return found; // true - breaks the forEach, false - continue
        });
    if (!id) {
        console.log('Not Found for uid:' + targetUid);
    }
    return id;
  });
Run Code Online (Sandbox Code Playgroud)

}

z5h*_*z5h 5

不,你能做的最好的就是子(键)搜索和相等(请参阅此处的示例https://firebase.google.com/docs/reference/js/firebase.database.Query#equalTo

// Find all dinosaurs whose height is exactly 25 meters.
var ref = firebase.database().ref("dinosaurs");
ref.orderByChild("height").equalTo(25).on("child_added", function(snapshot) {
  console.log(snapshot.key);
});
Run Code Online (Sandbox Code Playgroud)

没有比这更深入的查询方法了。

您可以使用其他结构进行反向查找、展平数据或以不同的方式解决它。