2015-04-05 184 views
2

我不明白爲什麼我對我的Firebase數據庫的查詢不起作用。我是新來的,並決定遵循一個「簡單的教程」來讀取數據。編寫JSON對象很有用,很高興看到這一點。另一方面閱讀開始讓我生氣。我唯一想做的事情是閱讀1「記錄」,其中電子郵件地址等於某個電子郵件地址。這些在用戶數據庫中是並且應該是唯一的。一旦我找回用戶,我就可以使用他的UID,即push()上自動生成的值來做其他事情。因此,這是一個演示,我現在不關心安全性,新創建的Firebase數據庫的默認讀取和寫入行爲均適用。任何人都可以隨時隨地進行完整的讀寫訪問。Firebase:查詢返回null

這是演示網站的代碼,看看東西的作品

<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('[email protected]') 
.endAt('[email protected]') 
.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('[email protected]') 
.endAt('[email protected]') 
.once('value', function show(record) { 
    $('#rawdata').text(JSON.stringify(record.val(), null, 4)); 
}); 

這是結構/用戶

"-JlyxV5xvQFLybevk9kD" : { 
    "AccountExpireDate" : "31/03/2016", 
    "AccountStartDate" : "01/04/2015", 
    "Alias" : "het hol van pluto", 
    "Attended" : { 
     "-JlyxMApRwcniJLXfqbU" : true 
    }, 
    "Birthday" : "01/01/1970", 
    "E-Mail" : "[email protected]", 
    "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" : "[email protected]", 
    "FirstName" : "Jos", 
    "LastName" : "Jossers", 
    "MemberOf" : [ "-JlyxMqpRw5nrJLef9bU" ], 
    "OrganizationID" : "", 
    "Password" : "abc123!" 
} 

爲了闡明這種結構,「UID」直接位於用戶的下面。當UID展開時,我們會看到細節。

我的查詢的預期結果是用戶的名字是「Demo」,他的姓氏是「De Demoon」的一個JSON對象。

在此先感謝

PS:我更熟悉SQL數據庫比NOSQL。我有點不得不使用這最後一個,除了我看到noSQL數據庫更有用,更強大,當我們有「預計算數據」時,這些數據可以存儲在關係數據庫中,但始終需要通過相同的聯接以一種方式。將這些結果計算(加入)一次,並將結果寫入noSQL數據庫,通過減少不必要的負載並將通常請求的數據集分組在一起,使查找速度更快。如果我錯了,請糾正我的視力。

回答

5

在您看到的演示中,Michael Wulf在添加的每條記錄上使用setPriority。如果您不這樣做,那麼通常您會在startAt之前致電orderByChild。在你的情況,這會做你想要什麼:

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

demofbdb 
.orderByChild('E-Mail') 
.startAt('[email protected]') 
.endAt('[email protected]') 
.once('value', function show(record) { 
    $('#rawdata').text(JSON.stringify(record.val(), null, 4)); 
}); 

要設置像演示的數據,你可以做這樣的事情:

function createDemoData(){ 
    var users = { 
     "123": { 
      "email": "[email protected]", 
      "name": "Kato" 
     }, 
     "234": { 
      "email": "[email protected]", 
      "name": "Anant" 
     }, 
     "345": { 
      "email": "[email protected]", 
      "name": "Michael" 
     }, 
     "456": { 
      "email": "[email protected]", 
      "name": "Kavya" 
     } 
    }; 

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

    fbdbref.child("123").setPriority("[email protected]"); 
    fbdbref.child("234").setPriority("[email protected]"); 
    fbdbref.child("345").setPriority("[email protected]"); 
    fbdbref.child("456").setPriority("[email protected]"); 
} 

現在,你可以通過email不使用orderByChild查詢,就像在演示中一樣。

+0

我的救主! orderByChild修復它。沒有注意到這是必要的,除非使用setPriority。以爲我可以將數據推送到firebase並查詢它,看起來像我認爲是錯誤的。我在猜測時發生的事情。 – jonny8bit 2015-04-07 21:13:49