Использование firebase .update в .where (вместо .do c) - PullRequest
0 голосов
/ 19 января 2020

Я новичок в Firebase и немного борюсь.

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

Я решил, что наилучшим способом сопоставить пользователя документов с текущий пользователь должен будет использовать .where (). get (), а затем использовать «update ()» для обновления массива.

Теперь вот где я застреваю. В документах Firebase их пример использования .update прикреплен к .do c

var washingtonRef = db.collection("cities").doc("DC");

//Atomically add a new region to the "regions" array field.
washingtonRef.update({
  regions: firebase.firestore.FieldValue.arrayUnion("greater_virginia")
});

Однако, поскольку я использую .where, я предполагаю, что должен использовать ссылки и снимки. Но я не совсем уверен, как ссылки работают в этом сценарии, и, как при этом, как правильно обновлять.

Вот код, который у меня есть через некоторое время, но я не могу разобраться с его вариантами. (по сути, я хочу добавить новый проект (в данном случае он называется «новый проект» в пользовательский массив postsProjects.)

 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")
    })
  })
})

Это дает мне ошибку: «.update () не является function ".

Кто-нибудь может мне помочь с моим решением, чтобы показать , как ссылки должны правильно использоваться в этом сценарии?

Ответы [ 2 ]

2 голосов
/ 19 января 2020

Ты почти у цели. Вы не можете обновить данные DocumentSnapshot, так как это представление данных документа в памяти. Вместо этого вам нужно получить DocumentReference и позвонить update.

doc.ref.update({
  postedProjects: firebase.firestore.FieldValue.arrayUnion("new project")
})
1 голос
/ 19 января 2020

Вам необходимо DocumentReference , чтобы обновить () документ. Ничто другое не будет работать.

В вашем коде doc является объектом типа QueryDocumentSnapshot. Если вы хотите, чтобы объект DocumentReference ссылался на документ из этого снимка, используйте его свойство ref .

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