2016-07-28 39 views

回答

2

您需要對數據進行非規格化處理。順便說一下,Push會根據時間生成一個唯一的郵票。您的users節點應包含uid。在UID的,你可以把

street: 123 Blah Lane, 
city:New York, 
state:New York, 
zip:94328 

我會用一個.SET或.update,但你需要尋找任何重複的(S)你想避免在這之前。你使用這個查詢。

火力地堡查詢用於:

var users = firebase.database().ref('users'); 
var street = users.orderByChild('street').equalTo('3455'); 
street.once('value', function(snapshot) { 
    console.log('A street with 3455 does '+(snapshot.exists()?'':'not ')+' exist') 
}); 

規則中的定義users指數:

{ 
    "rules": { 
    "users": { 
     ".indexOn": "street" 
    } 
    } 
} 
1

這取決於你如何定義 「相同元素」?如果你在數據中說一個元素是通過它的郵政編碼和街道來標識的(簡單地說,因爲它們是你指定的唯一兩個屬性),那麼通過串聯的方式將這些元素的集合鍵入郵政編碼是最有意義的和街道價值。

$user: { 
    Adressess: { 
     "444555666777_3455": { 
      street: "3455", 
      zipcode: "444555666777" 
     } 
    } 
} 

這樣,你把push()操作成child().set()操作:

userRef.child('Addresses').child(address.zipcode+'_'+address.street).set(address) 

使用push()爲收藏,你不希望通過他們的自然鍵訪問項目。如果你想通過它們的自然鍵(或者在這種情況下:通過自然鍵強制唯一性)來訪問這些項目,通常最好通過該自然鍵(在你的情況下:一個組合鍵)來存儲項目。