Firestore arrayUnion - PullRequest
       19

Firestore arrayUnion

0 голосов
/ 08 сентября 2018

Я создаю базовое приложение CRUD с vue.js и firebase.Я пытаюсь создать функциональность избранного и столкнулся с постоянной проблемой хранения данных.

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

export function addNewUserAction (type, key, userID){
  console.log(userID);
  console.log(key);

  firebase.firestore().collection('userActions').add({
    type: type,
    listing: key,
    user: userID,
    time: Date.now()
  })
  if(type === 'favorite'){
    var sendfav = db.collection('userProfiles').doc(userID).update({
      favs: firebase.firestore.FieldValue.arrayUnion(key)
    });
  }else if(type === 'xout'){
    var sendxout = db.collection('userProfiles').doc(userID).update({
      xouts: firebase.firestore.FieldValue.arrayUnion(key)
    });
  }else{
    console.error(type + " is not a user action");
  }
}

Я получаю следующую ошибку в консоли:

Uncaught TypeError: Cannot read property 'arrayUnion' of undefined
    at addNewUserAction

У меня есть firebase и ссылка на db импортирована, и я прогнал фиктивную .set () черезкаждая ссылка, чтобы подтвердить, что они указывают на правильные места.У меня также уже есть массивы, созданные в документе 'userProfile'.

Установка Firebase свежая, как и на прошлой неделе, поэтому у меня должна быть функция в моей сборке.

Кажется, что arrayUnionпросто не работает.Есть идеи?Другие функции пожарного магазина работают, поэтому я не уверен.Я что-то упустил?Спасибо

Ответы [ 3 ]

0 голосов
/ 11 ноября 2018

Если вы используете Admin SDK

У меня были некоторые случайные ошибки, подобные этой, среди других, когда я экспериментировал. Оказывается, это потому, что я использовал Firebase Admin SDK, который требует небольших изменений по сравнению с документацией веб-SDK. Если вы используете Firebase Admin, замените

firebase.firestore.FieldValue.arrayUnion(...

с

admin.firestore.FieldValue.arrayUnion(...

0 голосов
/ 14 марта 2019

Просто хотел обновить это. Я смог заставить это работать, импортировав firebase следующим образом:

import firebase from "firebase/firebase";

Я думаю, что раньше у меня было несколько проблем, первая из которых была связана с неправильной версией. Я только недавно обновил до 5.8.4, который полностью сломал мое приложение. Я попробовал вышеупомянутое как возможное решение, и это заставило мое приложение работать снова. Это заставило меня примерить это с arrayUnion, и это сработало. Надеюсь, это будет полезно для кого-то. Спасибо всем за помощь.

0 голосов
/ 11 ноября 2018

У меня была такая же проблема ...

Это не будет работать

import { fireStore } from '../../firebase';
....
fireStore.collection("users").doc(props.uid).update({
    points: fireStore.FieldValue.arrayUnion({value: pointObj.value, reason: pointObj.reason})
});

Я изменил импорт и использовал точный код из документации Firebase.
Это отлично работает.

import * as firebase from 'firebase';
....
fireStore.collection("users").doc(props.uid).update({
    points: firebase.firestore.FieldValue.arrayUnion({value: pointObj.value, reason: pointObj.reason})
});

Надеюсь, это поможет.

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