Firestore arrayUnion

时间:2018-09-07 22:37:49

标签: javascript firebase vue.js google-cloud-firestore

我正在使用vue.js和firebase构建一个基本的CRUD应用。我正在尝试建立收藏夹功能并遇到存储数据的持久性问题。

使用时,单击“添加到收藏夹”按钮时,我试图将文档ID添加到“用户配置文件”文档中的数组中。这是代码:

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 ref,并通过每个引用运行了一个假的.set(),以确认它们指向的位置正确。我已经在'userProfile'文档中创建了数组。

firebase安装是最新的,就像上周一样,所以我应该在我的构建中使用该功能。

似乎arrayUnion不能正常工作。有任何想法吗?其他的Firestore函数正在运行,因此我不确定。我会很无聊吗?谢谢

5 个答案:

答案 0 :(得分:5)

如果您使用的是Admin SDK

我正在尝试一些与此类似的随机错误。原来是因为我使用的是Firebase admin sdk,与Web SDK文档相比,它需要稍作更改。如果您使用的是Firebase管理员,请替换

firebase.firestore.FieldValue.arrayUnion(...

使用

admin.firestore.FieldValue.arrayUnion(...

答案 1 :(得分:2)

我遇到了同样的问题...

这行不通

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

希望有帮助。

答案 2 :(得分:0)

只想更新此内容。我可以通过以下方式导入firebase来使其正常工作:

import firebase from "firebase/firebase";

我认为我以前的问题是几个问题,第一个主要是没有正确的版本。我最近更新到5.8.4,这完全破坏了我的应用程序。我尝试了上述方法,将其作为可能的解决方案,并再次使我的应用正常工作。这导致我尝试使用arrayUnion进行尝试,并且成功了。希望多数民众赞成对某人有所帮助。谢谢大家的帮助。

答案 3 :(得分:0)

Firestore - Pass Array To arrayUnion()

let myArray = ["1", "2", "3"];

docRef.update({
    test: firebase.firestore.FieldValue.arrayUnion.apply(this, myArray)
});

这对我有用^

答案 4 :(得分:0)

对于Vue.js开发者

我在 src 文件夹中创建了一个名为 firebase 的文件夹,然后在 firebase 文件夹中创建了一个名为init.js的文件

init.js

import * as firebase from "firebase/app";
import "firebase/auth";
import "firebase/firestore";

// For Firebase JS SDK v7.20.0 and later, measurementId is optional
const firebaseConfig = {
  // Your Firebase Config
};

// Initialize Firebase
firebase.initializeApp(firebaseConfig);

// utils
const db = firebase.firestore();
const auth = firebase.auth();

export { db, auth, firebase };

现在在所需的任何组件中使用它们。 顺便

import { firebase, auth, db } from "@/firebase/init.js";

现在您可以使用firebase而不会出现任何错误

db.collection("users") // Collection Name
.doc(userId)           // Document in Collection indexed userId
.update({
    friends: firebase.firestore.FieldValue.arrayUnion(auth.currentUser.uid)
})
// friends is the array collection in firestore

就这样