Firebase:查询 returns 空
Firebase: query returns null
我不明白为什么我对 Firebase 数据库的查询不起作用。我是新手,决定按照 "simple tutorial" 来读取数据。写一个 JSON 对象成功了,很高兴看到这一点。另一方面,阅读开始让我生气。我唯一想做的是阅读 1 "record",其中电子邮件地址等于某个电子邮件地址。这些在用户数据库中是并且应该是唯一的。一旦我检索到用户,我就可以使用他的 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>
这是有效的演示代码
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));
});
这是我的代码,但 returns 为空,我不知道为什么
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!"
}
为了阐明此结构,"UIDs" 直接位于用户下方。当 UID 展开时,我们会看到详细信息。
我查询的预期结果是名字为 "Demo" 姓氏为 "De Demoon".
的用户的一个 JSON 对象
提前致谢
PS:我对 SQL 数据库比 SQL 更熟悉。我有点被迫使用最后一个,除了我看到没有 SQL 数据库更有用,更强大,当我们有 "precomputed data" 数据时,可以存储在关系数据库中但总是需要以一种方式通过相同的连接。将这些结果计算(加入)一次并将结果写入 noSQL 数据库,通过减少不必要的负载并将常用请求的数据集组合在一起,使查找速度更快。如果我在这方面有误,还请纠正我的看法。
在您查看的演示中,Michael Wulf 在添加的每条记录上都使用了 setPriority
。如果您不这样做,那么通常您会在 startAt
之前调用 orderByChild
。在您的情况下,这将执行您想要的操作:
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");
}
现在,您可以在不使用 orderByChild
的情况下通过 email
进行查询,就像在演示中一样。
我不明白为什么我对 Firebase 数据库的查询不起作用。我是新手,决定按照 "simple tutorial" 来读取数据。写一个 JSON 对象成功了,很高兴看到这一点。另一方面,阅读开始让我生气。我唯一想做的是阅读 1 "record",其中电子邮件地址等于某个电子邮件地址。这些在用户数据库中是并且应该是唯一的。一旦我检索到用户,我就可以使用他的 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>
这是有效的演示代码
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));
});
这是我的代码,但 returns 为空,我不知道为什么
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!"
}
为了阐明此结构,"UIDs" 直接位于用户下方。当 UID 展开时,我们会看到详细信息。
我查询的预期结果是名字为 "Demo" 姓氏为 "De Demoon".
的用户的一个 JSON 对象提前致谢
PS:我对 SQL 数据库比 SQL 更熟悉。我有点被迫使用最后一个,除了我看到没有 SQL 数据库更有用,更强大,当我们有 "precomputed data" 数据时,可以存储在关系数据库中但总是需要以一种方式通过相同的连接。将这些结果计算(加入)一次并将结果写入 noSQL 数据库,通过减少不必要的负载并将常用请求的数据集组合在一起,使查找速度更快。如果我在这方面有误,还请纠正我的看法。
在您查看的演示中,Michael Wulf 在添加的每条记录上都使用了 setPriority
。如果您不这样做,那么通常您会在 startAt
之前调用 orderByChild
。在您的情况下,这将执行您想要的操作:
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");
}
现在,您可以在不使用 orderByChild
的情况下通过 email
进行查询,就像在演示中一样。