使用 "Firebase" + "Geofire" 构建一个 "Tinder" 应用程序,这可能吗?

Building a "Tinder" app with "Firebase" + "Geofire", is it even possible?

我是 Firebase 的忠实粉丝,这就是我决定在我当前的应用程序中使用它的原因,但我已经到了我不再知道它是否能满足我的需求的地步。

应用程序功能与 "Tinder" 应用程序相同,您可以根据性别、位置和年龄在人物身上滑动 like/unlike。

我注意到没有理由一次有多个查询,所以我根据性别将每个人保存在一条路径中,"key" 是 "push key" firebase 生成。 我使用的是 "push key",因为它被编入索引,所以用户不会对同一个用户滑动两次。 (刷卡将从第一个加入系统的用户开始)

let lookForGender = "female"
//swipingIndex is the last user index I've swiped.
let baseRef = firebaseApp.database().ref("lookForGender")
                         .startAt(null, currentUser.swipingIndex);

baseRef.once('value', function (snapshot) {
      UsersFeedService.updateState(snapshot);
})

//DB looks like:

"female"
       someIndexKey
            userObject
       someIndexKey
            userObject
"male"
       someIndexKey
            userObject
       someIndexKey
            userObject

这很好用,但现在我正在寻找一种只让我靠近的人的方法,为此我添加了“GeoFire”,但它必须在自己的“密钥”上工作。 而且我不能通过位置键保存用户,因为这样他们就不会被索引(所以用户只会在每个用户上滑动一次)。

地理位置希望数据库看起来像这样:

“location”
     userObject
“location”
     userObject
“location”
     userObject
“location”
     userObject

获取所有用户的快照并在他们之间迭代不是一种选择,因为他们可能有很多用户。

这可以通过 firebase 实现吗?我没有以正确的方式构建数据?如果是这样,我该怎么办?

Firebase 中的典型设计模式如何?

users
  uid_0
   gender: "male"
   name: "George"
   age: "35"
  uid_1
   gender: "female"
   name: "Gracie"
   age: "32"

_geofire
  uid_0:
    g: "asdaseeefef"
    l: 
      0: 52.2101515118818
      1: -0.3215188181881
  uid_1:
    g: "oposooksok"
    l: 
      0: 50.1234567898788
      1: -0.8789999595988

使用此结构,您可以查询所有男性、女性 and/or 用户半径范围内的所有人(根据问题)。

只需一点代码,您就可以查询用户半径内的所有女性,按年龄的人或任何叫 Gracie 的人。