Обновите Firebase Array, используя .where (). Но получение ошибки ".update не является функцией - PullRequest
0 голосов
/ 17 января 2020

Итак, я пытаюсь обновить документ в моей базе данных, имеющий массив.

В настоящее время документ пользователя может выглядеть следующим образом.

username: John postsProjects: ['project -one ',' project-two ']

Однако, когда Джон отправляет «project-three» в другую коллекцию, я хочу взять документ johns и добавить «project-three» в его массив.

Вот мой код в настоящее время (обратите внимание, я не использую UID документа, так как я установил UID в качестве имени, но пользователь может изменить свое имя пользователя в дальнейшем, но его UID остается прежним)

  var newProject = db.collection('users').where('user_id', '==', this.userInfo.user_id);
  newProject.update({
    postedProjects: firebase.firestore.FieldValue.arrayUnion("test")
  })

Это код, который я следовал из Firebase do c, с небольшой корректировкой изменения .do c (uid) в .where, вместо этого сопоставить существующего пользователя с именем в коллекции.

Однако я получаю сообщение об ошибке «newProject.update не является функцией».

- добавлено. ошибка, так как я не уверен, где поставить "update ()"

        db.collection('users').where('user_id', '==', this.userInfo.user_id)
      .get()
      .then(function(querySnapshot)  {
        querySnapshot.forEach(function(doc) {

        doc.data().update({
          postedProjects: firebase.firestore.FieldValue.arrayUnion("new project")
        })
      })
    })}}

1 Ответ

1 голос
/ 17 января 2020

где () возвращает объект Query , который не имеет метода update(), как вы можете видеть из связанной документации API. Поскольку нет никакой гарантии, сколько документов может получиться в результате выполнения запроса , вам придется get () запрос, а затем выполнить итерацию результатов, чтобы найти DocumentSnapshot который соответствует документу, используйте его свойство ref , чтобы получить для него DocumentReference , и, наконец, update() документ, использующий эту DocumentReference.

...