使用参数无法查询的Firestore

时间:2019-03-07 17:55:41

标签: javascript firebase google-cloud-firestore

我有一个无法正常运行的查询。我有一个名为“游戏”的收藏,里面有很多文件。 每个文档都有一个名为“ hiScores”的数组,其中包含该回合的结果。我想查询特定玩家的所有游戏,例如:

.where('hiScores.playerName', '==', 'David Lamm')

这不返回任何东西。查询文档中的顶级变量时,我没有任何问题。我做错了什么?

数据库: db

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);
  }
);

2 个答案:

答案 0 :(得分:0)

问题在于hiScores字段是一个数组,而不是对象。您可以说这是一个数组,因为屏幕快照中该数组的第一个立即数元素的索引为0。您正在尝试查询hiScores,就好像它是具有单个属性的单个对象(称为playerName)一样。

Firestore不支持在数组字段内查询对象属性。如果您有一个数组字段,则只能查询查找数组中存在整个项目的文档(arrayContains查询)。

答案 1 :(得分:0)

如Doug所指出,目前在Firestore中是不可能的。

您可以在每个名为playerNames []的游戏中创建顶级字符串数组。然后在具有array_contains的playerNames上使用where条件。