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

Fra*_*áez 9 firebase google-cloud-firestore

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

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

var listsRef = db.collection("users/user1/lists");
var query = listsRef.where("public", "==", true);
Run Code Online (Sandbox Code Playgroud)

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

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

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

提前致谢.

Tom*_*ley 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"));
  });
});
Run Code Online (Sandbox Code Playgroud)

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

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

adminsFollowersQuery.get().then((allUserFollowers) => {
  allUserFollowers.docs.forEach((follower) => {
    console.log(follower.get("name"));
  });
});
Run Code Online (Sandbox Code Playgroud)

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


apa*_*sio 8

Firebase 现在支持查询子集合(截至 2019 年 5 月)。

你可以这样做

db.collectionGroup("lists").where("public", "==", true)
Run Code Online (Sandbox Code Playgroud)

这将为lists所有用户返回匹配的文档。

  • 我是否可以获取所有“列表”子集合,但不能从**所有**文档中获取,但前提是文档 ID 位于我提供的文档 ID 列表中? (3认同)