Firebase:查询返回null

jon*_*bit 2 javascript database json firebase firebase-realtime-database

我不明白为什么我对Firebase数据库的查询不起作用.我是新手,决定按照"简单的教程"来阅读数据.写一个JSON对象起作用,很高兴看到这一点.另一方面,阅读开始让我感到沮丧.我唯一想做的就是阅读1"记录",其中电子邮件地址等于某个电子邮件地址.这些在用户数据库中是,并且应该是唯一的.一旦我检索到用户,我就可以使用他的UID(push();上自动生成的值)来做其他事情.因此,这是一个演示,我暂时不关心安全性,新创建的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>
Run Code Online (Sandbox Code Playgroud)

这是有效的演示代码

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));
});
Run Code Online (Sandbox Code Playgroud)

这是我的代码,但返回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));
});
Run Code Online (Sandbox Code Playgroud)

这是/ 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!"
}
Run Code Online (Sandbox Code Playgroud)

为了澄清这种结构,"UID"直接位于用户下方.当UID展开时,我们会看到详细信息.

我的查询的预期结果是用户的一个JSON对象,其名字是"Demo",他的姓氏是"De Demoon".

提前致谢

PS:我比没有SQL更熟悉SQL数据库.我有点使用这最后一个,除了我看到没有SQL数据库更有用,而且功能强大,当我们有"预先计算的数据"时,数据可以存储在关系数据库中,但总是需要通过相同的连接在某种程度上.将这些结果计算(加入)一次并将结果写入noSQL数据库后,通过减少不必要的负载并将通常请求的数据集分组在一起,可以加快查找速度.如果我错了,请纠正我的愿景.

Sea*_*mus 5

在您看到的演示中,Michael Wulf setPriority在添加的每条记录中都使用了它.如果你不这样做,那么通常你会打电话orderByChild之前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));
});
Run Code Online (Sandbox Code Playgroud)

要设置像demo一样的数据,你可以这样做:

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");
}
Run Code Online (Sandbox Code Playgroud)

现在,您可以在email不使用的情况下进行查询orderByChild,就像在演示中一样.