2

Firebase データベースへのクエリが機能しない理由がわかりません。私はこれが初めてで、「簡単なチュートリアル」に従ってデータを読み取ることにしました。JSON オブジェクトの書き込みはうまくいきました。それを見てとてもうれしかったです。一方、読書は私を怒らせ始めます。私がやりたかった唯一のことは、電子メールアドレスがいくつかの電子メールアドレスに等しい1つの「レコード」を読み取ることでした。これらは、ユーザー データベース内で一意であり、一意である必要があります。ユーザーを取得したら、push(); で自動的に生成された値であるユーザーの UID を使用して、他のことを行うことができます。したがって、これはデモであり、現時点ではセキュリティについては気にしません。新しく作成された Firebase データベースのデフォルトの読み取りおよび書き込み動作が適用されます。誰でもどこからでも完全な読み書きアクセス。

これは、動作するかどうかを確認するためのデモ サイトのコードです。

<body>
    <h1>retrieve data</h1>
    <div id="aaa" style="margin:20px;padding:20px;border-radius:30px;background-color:#6666FF;float:left">USERADD</div>
    <div style="clear:both"></div>
    <pre id="rawdata"></pre>
</body>

これは機能したデモコードでした

var demofbdb = new Firebase("https://examples-sql-queries.firebaseio.com/user");

demofbdb
.startAt('anant@firebase.com')
.endAt('anant@firebase.com')
.once('value', function show(record) {
    $('#rawdata').text(JSON.stringify(record.val(), null, 4));
});

これは私のコードですが、null を返し、理由がわかりません

var demofbdb = new Firebase("https://<my-firebase-database>.firebaseio.com/Users");

demofbdb
.startAt('demo.dedemoon@desatanisten.org')
.endAt('demo.dedemoon@desatanisten.org')
.once('value', function show(record) {
    $('#rawdata').text(JSON.stringify(record.val(), null, 4));
});

これは /Users の構造です

"-JlyxV5xvQFLybevk9kD" : {
    "AccountExpireDate" : "31/03/2016",
    "AccountStartDate" : "01/04/2015",
    "Alias" : "het hol van pluto",
    "Attended" : {
        "-JlyxMApRwcniJLXfqbU" : true
    },
    "Birthday" : "01/01/1970",
    "E-Mail" : "demo.dedemoon@desatanisten.org",
    "FirstName" : "Demo",
    "LastName" : "De Demoon",
    "MemberOf" : [ "-JlyxMqpRw5nrJLef9bU" ],
    "OrganizationID" : "",
    "Password" : "abc123!"
},
"-JlyxSJ8MciBNxguT415" : {
    "AccountExpireDate" : "31/03/2016",
    "AccountStartDate" : "01/04/2015",
    "Alias" : "jos-het-debiele-ei",
    "Attended" : {
        "-JlyxMApRwcniJLXfqbU" : true
    },
    "Birthday" : "01/01/1970",
    "E-Mail" : "jos.jossers@gmail.com",
    "FirstName" : "Jos",
    "LastName" : "Jossers",
    "MemberOf" : [ "-JlyxMqpRw5nrJLef9bU" ],
    "OrganizationID" : "",
    "Password" : "abc123!"
}

この構造を明確にするために、「UID」はユーザーの直下にあります。UID が展開されると、詳細が表示されます。

私のクエリの期待される結果は、名前が「Demo」で姓が「De Demoon」であるユーザーの 1 つの JSON オブジェクトです。

前もって感謝します

PS: 私は noSQL よりも SQL データベースに精通しています。「事前計算されたデータ」、つまりリレーショナル データベースに格納できるが、常に同じ結合を通過する必要があるデータがある場合、noSQL データベースがより便利で強力であることがわかるという事実に加えて、この最後のものを使用することを余儀なくされています。ある意味で。これらの結果を 1 回計算 (結合) し、その結果を noSQL データベースに書き込むと、不要な負荷が軽減され、よく要求されるデータセットがグループ化されるため、ルックアップが大幅に高速化されます。これについて間違っている場合は、私のビジョンも修正してください。

4

1 に答える 1

5

あなたが見ていたデモでは、Michael WulfsetPriorityが追加された各レコードで使用されていました。そうしないと、通常はorderByChildbeforeを呼び出しますstartAt。あなたの場合、これはあなたが望むことをします:

var demofbdb = new Firebase("https://<my-firebase-database>.firebaseio.com/Users");

demofbdb
.orderByChild('E-Mail')
.startAt('demo.dedemoon@desatanisten.org')
.endAt('demo.dedemoon@desatanisten.org')
.once('value', function show(record) {
    $('#rawdata').text(JSON.stringify(record.val(), null, 4));
});

デモのようにデータをセットアップするには、次のようにします。

function createDemoData(){
    var users = {
        "123": {
            "email": "kato@firebase.com",
            "name": "Kato"
        },
        "234": {
            "email": "anant@firebase.com",
            "name": "Anant"
        },
        "345": {
            "email": "michael@firebase.com",
            "name": "Michael"
        },
        "456": {
            "email": "kavya@firebase.com",
            "name": "Kavya"
        }
    };

    var fbdbref = new Firebase("https://<my-firebase-database>.firebaseio.com/user");
    fbdbref.set( users );

    fbdbref.child("123").setPriority("kato@firebase.com");
    fbdbref.child("234").setPriority("anant@firebase.com");
    fbdbref.child("345").setPriority("michael@firebase.com");
    fbdbref.child("456").setPriority("kavya@firebase.com");
}

これで、デモのようにemailを使用せずにクエリを実行できます。orderByChild

于 2015-04-06T02:04:18.887 に答える