如何正确构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 })