Firebase NoSQL数据建模 - 像计数器一样

时间:2018-02-03 22:58:30

标签: firebase firebase-realtime-database nosql

我目前正在学习Firebase / NoSQL数据库建模。我刚结束观看Firebase for SQL developers,但我仍然没有怀疑。

假设我正在创建Instagram风格的应用,用户可以分享他们的照片,每个用户都可以喜欢每张照片。

所以我想实现两件事: 1.知道哪个用户喜欢哪张照片。 (所以只有一个像每个用户的照片) 2.每张照片有多少喜欢。

我当前的数据库如下所示:

{
  "images": {
    "100": {
      "imageUrl": "../../image.png",
    },
    "101": {
      "imageUrl": "../../image.png",
    }
  },
  "users": {
    "200": {
      "name": "user1"
    },
    "201": {
      "name": "user2"
    }
  },
  "likes": {
    "100": 1,
    "101": 2
  },
  "likesPerUser": {
    "200": {
      "100": "true"
    },
    "201": {
      "100": "true",
      "101": "true"
    }
  }
  "imagesPerUser": {
    "200": {
        "101": "true"
    },
    "201": {
        "100": "true"
    }
}

我的问题与计数器有关,计算每张照片有多少喜欢。最好的做法是将它们作为自己的“根”对象(当前模型)或者为照片下的“喜欢”创建键值对(并且对于authorID也可以这样做)?

1 个答案:

答案 0 :(得分:1)

This Firebase Sample建议在每个帖子下设置计数器(likes_count)。并且还有一个带有列表/ lookup的节点(likes)。像这样:

"images": {
    "100": {
      "imageUrl": "../../image.png",
      "likes_count":2,
      "likes":{
        "200":true,
        "201":true
      }
    },
    "101": {
      "imageUrl": "../../image.png",
      "likes_count":1,
      "likes":{
        "201":true
      }
    }
}

这样您就可以确保每个用户只有一个,因为密钥在Firebase实时数据库节点下必须是唯一的,并且用户ID用作likes_count节点下的密钥。你也可以知道哪些用户喜欢这张照片,因为他们的uid就在那里。很明显,你可以通过访问柜台看到有多少喜欢照片。