【问题标题】:How to Structure Data Under Saved Data in Firebase如何在 Firebase 中保存数据下构造数据
【发布时间】:2016-05-06 21:12:29
【问题描述】:

这是我在 Firebase 中的代码。

//Create a reference to a Firebase database URL
Firebase *savedRef2 = [[Firebase alloc] initWithUrl:@"https://example.firebaseio.com/Location_Coordinates"];

// Write data to Firebase

Firebase *postRef2 = [savedRef2 childByAppendingPath: @"LOCATION DATA"];
NSDictionary *post1 = @{
                      @"DATE":  dateString,
                      @"Lat": @(location.coordinate.latitude),
                      @"Long": @(location.coordinate.longitude),
                      @"USER": name,
                      };
Firebase *post1Ref = [postRef2 childByAutoId];
[post1Ref setValue: post1];

当用户在应用程序上单击保存时,数据会保存到我的 Firebase 数据库中,但它会继续作为新对象保存在之前保存的下方。我怎样才能让它保存一次,其余保存的是第一次保存的数据的子项?

这是一张Current saved data for coordinates. 的图片,它是如何不断保存的,我不希望这样。我怎样才能使它看起来像这样2。我正在保存用户的坐标,但它一直在重新创建一个新的“childByAutoId”字符串,我只是希望保存的数据属于第一个“childByAutoId”字符串,而不是继续创建新的 ID,因此每个用户的坐标每次都属于一个 ID已保存。

更新: 我有不同的用户提交数据,其中数据是坐标。我希望使用“childByAutoID”仅在一个节点下创建相同的用户数据,其余数据(坐标)将在该节点下。它现在的设置方式是将多个节点(childByAutoId)记录到 Firebase,这让我很难阅读它,这就是为什么我希望首先创建一个节点(childByAutoId),其余节点属于每个节点有人点击保存的时间。 这就是我目前拥有的方式。 这就是我想要的

【问题讨论】:

  • ChildByAutoId 创建一个新的节点名称。因此,每次调用 [post1 setValue:post1] 时,代码都会在 LOCATION DATA 下创建单独的子节点。看起来您链接的两个图像实际上是相同的 - 如果您单击当前保存的图像中每个节点名称旁边的减号,它将像图像 2 中的那样。所以......代码似乎正在工作 - 可以你澄清了这个问题?
  • 我只想创建 1 个新节点,然后将其余数据归入该节点。我怎样才能使它只创建一个节点,其余的作为子节点落入该特定新节点? @Jay
  • @CarlosAlan 在您写的问题中,您希望新创建的节点成为第一个创建的节点的子节点 - 这真的是您想要实现的吗?此外,您的两个结构在我看来都是一样的,您提供的代码完全创建了图 2 中的结构
  • 我有不同的用户提交数据,其中数据是坐标。我希望使用“childByAutoID”仅在一个节点下创建相同的用户数据,其余数据(坐标)将在该节点下。它现在的设置方式是将多个节点(childByAutoId)记录到 Firebase,这让我很难阅读它,这就是为什么我希望首先创建一个节点(childByAutoId),其余节点属于每个节点有人点击保存的时间。 @pkacprzak
  • 我用新图片更新了这篇文章,说明了它的现状和我想要的样子。 (我对第二张照片进行了Photoshop处理,说明我希望它的结构,这样它就可以是视觉的,而不是我试图打字)。 @Jay

标签: ios objective-c firebase firebase-realtime-database


【解决方案1】:

超级简单!

当用户进行身份验证时,auth Firebase 变量会填充他们的用户 ID。

一般来说,如果您要存储有关用户的信息,您会存储该数据或将该数据与他们的 uid 相关联。

因此,当您要为每个用户存储数据时,请将其存储在父节点为其 uid 的节点中

Location_Coordinates
 LOCATION DATA
   uid_0
     childByAutoId
     childByAutoId
   uid_1
     childByAutoId
     childByAutoId

然后创建引用

Firebase *rootRef = [[Firebase alloc] initWithUrl:@"https://example.firebaseio.com];
Firebase *locCoordsRef = [rootRef childByAppendingPath("Location_Coordinates");
Firebase *locDataRef = [locCoordsRef childByAppendingPath("LOCATION DATA"];

NSString *uid = rootRef.authData.uid

Firebase *thisUserRef = [locDataRef childByAppendingPath(uid)];

NSDictionary *userDataDict = @{
                      @"DATE":  dateString,
                      @"Lat": @(location.coordinate.latitude),
                      @"Long": @(location.coordinate.longitude),
                      @"USER": name,
                      };
Firebase *dataRef = [thisUserRef childByAutoId];
[dataRef setValue: userDataDict];

【讨论】:

    猜你喜欢
    • 2014-11-06
    • 2023-03-29
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2016-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多