gpt4 book ai didi

Firebase(Vue)通过(多个)子值获取

转载 作者:搜寻专家 更新时间:2023-10-30 22:50:14 25 4
gpt4 key购买 nike

我从 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 参与的所有游戏

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

最佳答案

由于您将玩家存储在 map 中,对于第一种情况,您可以查询与 playerId 对应的 players 对象属性,如下:

  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

关于Firebase(Vue)通过(多个)子值获取,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53569769/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com