Firestore найти документы с определенным объектом в поле массива объектов - PullRequest
0 голосов
/ 25 февраля 2019

Я пытаюсь сделать запрос в моей базе данных пожарного магазина, чтобы найти все документы в коллекции, которые включают определенный объект в поле массива.Допустим, в моей базе данных есть коллекция статей, например:

articles:
  [
    {
      id: "1",
      title: "First Article",
      comments:[]
      relatedArticles:[
        {
          id: "2",
          title:"Second Article"
        },
        {
          id: "3",
          title:"Third Article"
        },
      ]
    },
    {
      id: "2",
      title: "Second Article",
      comments:[]
      relatedArticles:[
        {
          id: "1",
          title:"First Article"
        }
      ]
    }
    {
      id: "3",
      title: "Third Article",
      comments:[]
      relatedArticles:[
        {
          id: "1",
          title:"First Article"
        }
      ]
    }
  ]

Каждая статья в коллекции статей имеет поле массива (relatedArticles), которое включает в себя набор объектов, каждый из которых включает в себя как id, так и заголовок связанной статьи.Скажем, я хотел запросить в базе данных все статьи, у которых есть статья 1 в поле связанных статей.Как бы я поступил так, предполагая, что эта структура не может быть изменена.Я пробовал следующее безрезультатно:

firestore().collection("articles")
  .where("relatedArticles", "array-contains", {title: "First Article", id: "1"})

Возможно ли это?А если нет, то что?

1 Ответ

0 голосов
/ 25 февраля 2019

При выполнении поиска, содержащего массив, вы можете сопоставлять только целые элементы объекта в массиве.Вы не можете выбрать более глубокое поле объекта в массиве, как вы пытаетесь это сделать сейчас.

Если вы хотите удовлетворить этот запрос, вам понадобится другое поле в вашем документе с возможностью поиска,Возможно, вам подойдет массив из только идентификаторов документов.Для удовлетворения запросов обычно дублируют данные в базе данных NoSQL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...