[使用where语句从Firebase中快速记录记录

问题描述 投票:0回答:1

我正在尝试为字段包含特定值的特定用户返回帖子数。我在Firebase中使用的结构在这里:

{
  "posts" : {
    "-Lyzpsb1hH4LUPvcXE3H" : {
      "beverageCategory" : "Beer",
      "beverageName" : "Dortmunder",
      "beveragePrice" : "3.99",
      "beverageRating" : 3,
      "beverageType" : "Lager",
      "imageUrl" : "https://firebasestorage.googleapis.com/v0/b/socialspirit-37cae.appspot.com/o/post-pics%2F3C23E923-A3BD-4393-B3EF-8F939D8B08B8?alt=media&token=ac80cb98-f2a1-4197-b328-2a69a2ac1fd1",
      "wineVintage" : ""
    }
  },
  "user" : "sdkjvksdjf",
  "users" : {
    "0hyN8N2klJWqPi2lkRqNK3vg7z63" : {
      "posts" : {
        "-Ly6ciYHm7v5JFy1VmVY" : true,
        "-Ly6cyLukI6aRRki5yna" : true
      },
      "provider" : "Firebase"
    },
    "26OUuaRZEVWUmkLJp13LzirGbs13" : {
      "posts" : {
        "-Ly6fGmQEMZz3c-azMnJ" : true
      },
      "provider" : "Firebase"
    },
    "5r6FulsvIRap7pLK5D3zV8qyPVv1" : {
      "provider" : "Firebase"
    },
    "gQpktBMh97hTqiysHBwvVLZl70y1" : {
      "posts" : {
        "-Lyzpsb1hH4LUPvcXE3H" : true,
        "-LyzqFgvmrBgdsgKSt_5" : true,
        "-Lz-fIMDal00ex3_viQo" : true,
        "-Lz-lXsSBqKlcf8hBext" : true,
        "-Lz2eNLfk1PFEVkEgmwa" : true,
        "-Lz2etF0UqFqLkdGOR13" : true,
        "-Lz2fGUi0qzJtniNr5LX" : true,
        "-Lz2gP5c47yHDO2g0ljr" : true,
        "-Lz2gdhfedZfTtzjP2ee" : true,
        "-Lz2gllC3caXgPf2VAPU" : true,
        "-Lz2hH8FbNmBEOLcHCJz" : true,
        "-Lz2jzkXuEZ3Cfe96eGW" : true,
        "-Lz3RvuW4fMXarhW7vLv" : true,
        "-Lz3S8YA0vgk4ZrjL_Kk" : true
      },
      "provider" : "Firebase"
    }
  }
}

我正在使用下面的代码来获取饮料类型为“啤酒”的记录数。

DataService.ds.REF_USERS.child("\(uid)").child("posts").child("beverageCategory")
.queryOrderedByValue().queryEqual(toValue: "Beer")
.observe(DataEventType.value, with: { (snapshot)     in
    print("SNAP - \(snapshot.childrenCount)")
})

但是childrenCount返回0。知道我在做什么错吗?谢谢!

编辑:我为数据结构添加了JSON,我认为我省略了一个重要的细节。数据结构实际上包含具有usersposts和链接回postid的关联posts。我认为我要做的是首先找到用户的帖子,然后从这些帖子中获得每个类别的总数。我猜测这与我尝试的方法略有不同。有什么想法吗?

swift firebase firebase-realtime-database
1个回答
0
投票

您的查询不正确。由于您要过滤posts下每个节点的子属性,因此应调用queryOrdered(byChild:)

所以:

DataService.ds.REF_USERS.child("posts")
  .queryOrdered(byChild: "beverageCategory")
  .queryEqual(toValue: "Beer")
  .observe(DataEventType.value, with: { (snapshot)     in
    print("SNAP - \(snapshot.childrenCount)")
  })

另请参阅ordering and filtering data上的Firebase文档。

© www.soinside.com 2019 - 2024. All rights reserved.