Вопрос:

Firestore - запрос подбора для конкретного документа

firebase google-cloud-firestore

6949 просмотра

2 ответа

82 Репутация автора

Примечание. Запросы по вложенным коллекциям в настоящее время не поддерживаются в 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);

Но мне интересно, могу ли я запросить в определенной коллекции, которая приходит из конкретного документа. На самом деле, какая разница здесь и в корневой коллекции?

Заранее спасибо.

Автор: Francisco José Martínez Páez Источник Размещён: 09.01.2018 09:44

Ответы (2)


10 плюса

366 Репутация автора

Решение

Вы можете запрашивать вложенную коллекцию, если знаете, к какому документу она относится. Например, следующее является допустимым запросом вложенной коллекции:

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.

Автор: Tom Bailey Размещён: 09.01.2018 10:37

0 плюса

388 Репутация автора

Firebase теперь поддерживает запросы вложенных коллекций (по состоянию на май 2019 года).

Вы можете сделать это

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

который вернет соответствующие listsдокументы для всех пользователей.

Автор: apaatsio Размещён: 11.05.2019 12:39
Вопросы из категории :
32x32