如何正确构buildFirebase数据库以便于阅读和删除

我正在创build一个配方寻找应用程序,基本上我有一个“collections夹”,如果用户最喜欢的食谱,他们将能够在应用程序的collections夹选项卡中轻松访问它。 基本上这是我现在的结构:

app: users: 2ReAGRZlYiV5F2piwMakz59XDzl1(uid): favorites: -KRUe6mMhaQOX62zgXvg(childByAutoId): ID: 172171 (recipe id) UTJ0rVst9zMSuQhWkikTCu8558C2(uid): favorites: -KRUzMxTvv-uNvX9J9_-(childByAutoId): ID: 578141 (recipe id) 

基本上每当他们去collections夹选项卡,我需要的所有配方ID的列表,以便我可以进行API调用来检索食谱信息。 我基本上循环了字典。 我也希望能够让用户不喜欢这个配方,所以从数据库中删除它。 如果我正在使用,我将如何移除它:

 USERS_REF.child(uid).child("favorites").childByAutoId().setValue(["ID": recipeID]) 

添加配方?

有没有更好的结构,我可以用它来读取食谱id并轻松地将其移除?

你可能想考虑做一个NSDictionary最爱: –

  app: users: 2ReAGRZlYiV5F2piwMakz59XDzl1: //(uid) favorites: {172171 : true, 4123123 : true,..} 
  • 在collections夹中添加: –

      USERS_REF.child(uid).child("favorites").updateChildValues([recipeID: "true"]) 

    请注意,如果您的recipeID是唯一的,即不存在于collections夹节点,那么它将追加值,如果recipieID已经存在,它将只更新它的值(不要更喜欢这个追加,查找下一个选项)

    要么

     let prntRef = USERS_REF.child(uid).child("favorites") prntRef.observeSingleEventOfType(.Value, withBlock: { (snap) in if let favDict = snap.value as? NSMutableDictionary{ favDict.setObject("true",forKey : recipeID) prntRef.setValue(favDict) } else { prntRef.setValue(["true":recipeID]) } }) 
  • 在collections夹中更新 : –

      USERS_REF.child(uid).child("favorites").updateChildValues([recipeID: "false"]) //User doesn't like's the recipe anymore 
  • 从collections夹中删除 : –

      USERS_REF.child(uid).child("favorites").child(recipeID).removeValue() //User want to remove this item from its history 
  • 虽然正在检索

      let prntRef = USERS_REF.child(uid).child("favorites") prntRef.observeSingleEventOfType(.Value, withBlock: {(snap) in if let favDict = snap.value as? [String:AnyObject]{ for each in favDict{ let eachRecipeId = each.0 //recipeID let isMyFav = each.1 // Bool } } else { print("No favourites") } }) 
  • 同时检索一个已知的key-value

      let prntRef = USERS_REFFIR.child("users").queryOrderedByChild("favorites/\(recipeID)").queryEqualToValue(true) prntRef.observeSingleEventOfType(.Value, withBlock: {(snap) in //snap containing all the Users that carry that recipeID in their favourite section })