注意: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);
但我想知道我是否可以查询来自特定文档的特定集合。事实上,这里和根集合中的区别是什么?
提前致谢。
答案 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
个文档。