【问题标题】:Firebase (Vue) get by (multiple) child valueFirebase(Vue)通过(多个)子值获取
【发布时间】:2019-05-03 07:57:10
【问题描述】:

我从一个 firebase 收藏中获得了所有游戏。此游戏合集如下所示:

{
    zgaHRO2yW6lafg1ubz4y : { // This is a game
        createdOn: Timestamp,
        finished: false,
        game: "TNhII8jDU23GUZyyqH5X",
        players: {
            NJ2U5MwVAIww6TWkHMv2: true,
            lfNFlKnsbuUJGwINcJ4RMXbNVfs1: true
        },
        startedBy: "lfNFlKnsbuUJGwINcJ4RMXbNVfs1"
    },
    QSkjMQS1232ezklmqKSDJoi : { // This is a game
        createdOn: Timestamp,
        finished: false,
        game: "TNhII8jDU23GUZyyqH5X",
        players: {
            AQSDNJ2U5MwVAIwWkHMv2: true,
            lfNFlKnsbuUJGwINcJ4RMXbNVfs1: true
        },
        startedBy: "lfNFlKnsbuUJGwINcJ4RMXbNVfs1"
    }
}    

要获取所有游戏,我执行以下操作:

const gamesCollection = db.collection('games')
firebase.gamesCollection.where('finished', '==', false).orderBy('createdOn', 'desc').onSnapshot(querySnapshot => {
    querySnapshot.forEach(doc => {
        const games = doc.data()
    })
})

这很好用:我得到了所有尚未完成的游戏......但现在我想像这样“查询”它们:

  1. 获取玩家lfNFlKnsbuUJGwINcJ4RMXbNVfs1参与的所有游戏。
  2. 获取玩家lfNFlKnsbuUJGwINcJ4RMXbNVfs1或玩家NJ2U5MwVAIww6TWkHMv2参与的所有游戏

似乎无法弄清楚它是如何完成的......

【问题讨论】:

    标签: firebase vue.js google-cloud-firestore


    【解决方案1】:

    由于您将玩家存储在地图中,第一种情况您可以查询playersplayerId对应的对象属性,如下所示:

      const playerIdToCheck = 'AQSDNJ2U5MwVAIwWkHMv2'
      const gamesCollection = db.collection('games')
    
      gamesCollection
        .where('players.' + playerIdToCheck, '==', true)
        .onSnapshot(querySnapshot => {
          querySnapshot.forEach(doc => {
            const games = doc.data()
            console.log(doc.id, ' => ', games);
          });
        });`
    

    对于第二种情况(“OR”查询),实际上不可能在 Firestore 中执行 OR 查询:因此您必须执行两个查询(即一个用于 lfNFlKnsbuUJGwINcJ4RMXbNVfs1和一个用于 NJ2U5MwVAIww6TWkHMv2) 并将它们合并到您的前端。

    您可以在此处查看有关 OR 查询和可能的解决方法的更多信息:Implementing OR in firestore query - Firebase firestore 或此处https://stackoverflow.com/search?tab=relevance&q=firestore%20OR%20query

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-17
      • 2019-07-11
      • 2019-12-20
      • 2018-04-19
      • 1970-01-01
      • 2019-02-01
      • 1970-01-01
      • 2018-10-15
      相关资源
      最近更新 更多