【问题标题】:How to handle tags in a noSQL database如何处理 noSQL 数据库中的标签
【发布时间】:2016-02-17 01:51:28
【问题描述】:

我有一个带有产品的 noSQL 数据库。这些产品显然有一些特性,我可以通过它们的特性过滤掉这些产品。

这如何与标签一起使用?更具体地说,我应该如何构造节点以便我可以过滤掉带有特定标签的项目?

Firebase

如果您熟悉 Firebase .equalTo(),请跟进:我将如何构建我的 FB 数据库以及如何查询带有特定标签的项目?

我正在考虑的一件事是为节点设置单独的属性,例如:

   $productId
       /tag_1
       /tag_2

但是我必须多次过滤或查询。如何克服或有其他方法?

【问题讨论】:

    标签: firebase database-design firebase-realtime-database database nosql


    【解决方案1】:

    您将tags 放在products 下方。尝试翻转它。

    $tagId
       /$productId
    

    现在您无需查询即可通过标签查找产品。

    // https://<my-firebase-app>.firebaseio.com/tags/{tag}/{productId}
    var ref = new Firebase('url').child('tags').child($tagId).child($productId);
    

    JSON 看起来像这样:

    {
       "tags":{
          "kinda_cool":{
             "product_3":true,
             "product_6":true
          },
          "super_cool":{
             "product_1":true,
             "product_2":true,
             "product_4":true,
             "product_5":true
          }
       }
    }
    

    您可以存储任何其他相关信息,而不是 true。但是使用$productId 作为键,您可以通过标签轻松检索产品。

    【讨论】:

    • 这听起来需要做很多工作,因为如果更改或添加标签也需要更新?需要大量跟踪?如果我有 5 个标签,那么 thar 产品会返回 5 次
    • 是的,将其视为一个索引。这可能需要更多的维护,但它是通过标签查找产品的最有效方法之一。您还可以使用多路径更新来保持一切一致。 firebase.com/blog/…
    • 啊,我想我明白你的意思了。不必进行任何更改,因为您不再使用 products/tags 位置。就是这个新索引。
    • 如果此答案符合您的标准,请您将其标记为已接受。保持应答队列清晰是件好事。如果没有,请告诉我还需要什么。
    • @DavidEast 如何使用 mongoDB 执行此操作?因为它不支持键名(即“标签”)
    猜你喜欢
    • 2011-05-30
    • 1970-01-01
    • 2012-03-21
    • 2012-10-09
    • 2011-07-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-07-27
    相关资源
    最近更新 更多