【问题标题】:Swift & Firebase - Delete hashtags from postSwift & Firebase - 从帖子中删除主题标签
【发布时间】:2018-04-01 23:15:19
【问题描述】:

我正在尝试编写函数来删除我的应用中的帖子。当我删除帖子时,我还想删除与该帖子相关的所有主题标签。 我使用 Firebase 的时间不长,我真的不知道该怎么做:/

这是我的数据库:

我有每一个“主题标签”,在孩子身上,都有相关的帖子。

当我删除帖子时,我想从主题标签中删除关联的孩子。

这是我未完成的代码:

func deleteHashtagsFromPost(withPost id: String) {
      Database.database().reference().child("hashtag").observe(.value) { (snapshot) in
         if let dict = snapshot.value as? [String: Any] {

            for hashtag in dict {
               // Here I can access to the hashtag with hashtag.key
               // And also to the children associated with hashtag.value
            }
         }
      }
   }

这是我数据库中“帖子”的见解:

【问题讨论】:

  • 您熟悉 Firebase Cloud Functions 吗?您可以创建一个事件侦听器,从相应的主题标签中删除帖子。
  • 能告诉我更多关于这个功能的信息吗?
  • 首先我指的这个功能将存在于云端。您在 js 中本地编写代码并使用 Firebase 的 CLI 部署代码。但是,您也可以删除 Swift 中的帖子。
  • 你能告诉我们更多关于你的帖子吗?他们看起来怎么样?
  • @Callam 我为你编辑了我的帖子。

标签: ios firebase firebase-realtime-database hashtag swift4


【解决方案1】:

在像 Firebase 这样的 noSQL 数据库中,最好的做法是复制你的对象。

你的标签最初属于相关的帖子,所以把它们放在这里。很容易在您的应用程序中显示它们,就像它们在您检索的对象中一样。您可能还想根据标签搜索帖子,因此您可以像以前一样创建一个标签分支,这样您就可以获取所有相关的帖子,而无需在每个帖子中搜索标签。

这似乎是多余的,但这就是它在 noSQL 中的工作方式,如果您想要更好的结果,您必须为您的数据处理多个位置。

您可能知道,但如果您的数据模型有很多关系,最好选择 SQL 数据库。 (你的模型没有太多,所以没关系)

法式长棍面包万岁!

【讨论】:

    【解决方案2】:

    这里的问题是在您的帖子中您没有存储主题标签。因此,为了删除它们,您必须遍历您不想在客户端执行的整个主题标签分支。我会将主题标签存储在 post 对象中。然后这样做

    let hashtags = [String]() // put all the posts hashtags in here
    let postKey = post.key // key for the post you just deleted
    
    for i in 0..<hashtags.count {
        deleteHashtagsFromPost(postKey: postKey, hashtagUsedInPost: hashtags[i])
    }
    
    func deleteHashtagsFromPost(postKey: String, hashtagUsedInPost: String) {
        Database.database().reference.child("hashtag").child(hashtagUsedInPost).child(postKey).removeValue()
        // you can add a completion block if you wish
    }
    

    如果您有兴趣使用 Firebase 云功能,它可能看起来像这样:

    'use strict';
    
    const functions = require('firebase-functions');
    const admin = require('firebase-admin');
    admin.initializeApp(functions.config().firebase);
    
    // so we can write to the database in functions outside of the database triggers
    var db = admin.database();
    
    exports.deleteHastags = functions.database.ref('/posts/{postid}').onDelete(event => { 
    
      console.log("Post was deleted");
      const key = event.data.previous.key;
      const post = event.data.previous.val();
      const hashtags = event.data.previous.val().hashtags; // requires that the hashtags are stored with the post in FB DB
      removeHashtags(hashtags, key);
      return;
    });
    
    function removeHashtags(hashtags, key) {
        for (var hashtag in hashtags) {
            db.ref("hashtag").child(hashtag).child(key).remove();
        }
    }
    

    Firebase Database Triggers

    【讨论】:

      猜你喜欢
      • 2018-05-05
      • 2015-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-05-13
      • 1970-01-01
      相关资源
      最近更新 更多