我有一个无法正常运行的查询。我有一个名为“游戏”的收藏,里面有很多文件。 每个文档都有一个名为“ hiScores”的数组,其中包含该回合的结果。我想查询特定玩家的所有游戏,例如:
.where('hiScores.playerName', '==', 'David Lamm')
这不返回任何东西。查询文档中的顶级变量时,我没有任何问题。我做错了什么?
db.collection('games')
.where('hiScores.playerName', '==', 'David Lamm')
.get()
.then(function(querySnapshot) {
console.log('Davids games:')
querySnapshot.forEach(function(doc) {
console.log(doc.id, " => ", doc.data());
});
})
.catch(function(error) {
console.log("Error getting documents: ", error);
}
);
答案 0 :(得分:0)
问题在于hiScores字段是一个数组,而不是对象。您可以说这是一个数组,因为屏幕快照中该数组的第一个立即数元素的索引为0。您正在尝试查询hiScores,就好像它是具有单个属性的单个对象(称为playerName)一样。
Firestore不支持在数组字段内查询对象属性。如果您有一个数组字段,则只能查询查找数组中存在整个项目的文档(arrayContains查询)。
答案 1 :(得分:0)
如Doug所指出,目前在Firestore中是不可能的。
您可以在每个名为playerNames []的游戏中创建顶级字符串数组。然后在具有array_contains的playerNames上使用where条件。