我正在使用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函数正在运行,因此我不确定。我会很无聊吗?谢谢
答案 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的文件>
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
就这样