Firestore - 特定文档的子集合查询

时间:2018-01-09 21:44:17

标签: firebase google-cloud-firestore

注意:Cloud Firestore目前不支持跨子集查询。如果需要跨集合查询数据,请使用根级集合。

当我为我阅读文档时,不清楚是否可以这样做:

var listsRef = db.collection("users/user1/lists");
var query = listsRef.where("public", "==", true);

我可以理解,如果我尝试这样做,它就不受支持了:

var listsRef = db.collection("users/{userId}/lists");
var query = listsRef.where("public", "==", true);

但我想知道我是否可以查询来自特定文档的特定集合。事实上,这里和根集合中的区别是什么?

提前致谢。

2 个答案:

答案 0 :(得分:10)

只要您知道它所属的文档,就可以查询子集合。例如,以下是有效的子集合查询:

const usersCollection = firestore.collection("users");
const adminDocument = usersCollection.doc("admin");
const adminsFollowersQuery = adminDocument.collection("followers").where("name", "==", "Arthur Dent");

adminsFollowersQuery.get().then((adminsFollowers) => {
  adminsFollowers.docs.forEach((adminFollower) => {
    console.log(adminFollower.get("name"));
  });
});

正如您所指出,以下内容目前无效:

const allUserFollowersQuery = firestore.collection("users/{wildcard}/followers")
  .where("name", "==", "Arthur Dent");

adminsFollowersQuery.get().then((allUserFollowers) => {
  allUserFollowers.docs.forEach((follower) => {
    console.log(follower.get("name"));
  });
});

我认为这里的文档有点令人困惑但是通过“查询子集合”他们的意思是,您可以查询特定的子集合,如上所述,但是您无法查询常规子集合。至少不是使用FireStore SDK的单个操作。

答案 1 :(得分:0)

Firebase现在支持querying subcollections(截至2019年5月)。

您可以做到

db.collectionGroup("lists").where("public", "==", true)

,它将为所有用户返回匹配的lists个文档。