Firebase(Vue)按(多)子值获取
我从firebase收藏中获得所有游戏。此游戏集合如下所示:Firebase(Vue)按(多)子值获取,firebase,vue.js,google-cloud-firestore,Firebase,Vue.js,Google Cloud Firestore,我从firebase收藏中获得所有游戏。此游戏集合如下所示: { zgaHRO2yW6lafg1ubz4y : { // This is a game createdOn: Timestamp, finished: false, game: "TNhII8jDU23GUZyyqH5X", players: { NJ2U5MwVAIww6TWkHMv2: true, lfNFlK
{
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()
})
})
这很好:我得到了所有尚未完成的游戏。。。但现在我想像这样“询问”他们:
lfNFlKnsbuUJGwINcJ4RMXbNVfs1
的游戏lfNFlKnsbuUJGwINcJ4RMXbNVfs1
或玩家nj2u5mwvaiw6twkhmv2
参与的所有游戏似乎无法理解这是如何完成的…因为您将玩家存储在地图中,对于第一种情况,您可以查询与
玩家ID
对应的玩家对象属性,如下所示:
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查询:因此,您必须执行两个查询(即一个用于LFNFLKNSBUJGWincJ4RMXBNVFS1,另一个用于NJ2 U5MWVAIWW6TWKHMV2),并将它们合并到前端
您可以在此处或此处了解更多关于或查询以及可能的工作