我花了几个小时尝试使用云功能来更新存储在我的应用程序中的Cloud Firestore中的用户得分,但出现此错误,我不知道如何解决此问题。
这是我的代码:
const auth = require('firebase/auth');
const functions = require('firebase-functions');
const nodemailer = require('nodemailer');
const FieldValue = require('firebase-admin').firestore.FieldValue;
const admin = require('firebase-admin');
admin.initializeApp(functions.config().firebase);
const db = admin.firestore();
exports.addPoints = functions.firestore
.document(`users/{user}`)
.onCreate(async (snap, context) => {
const invitingFriendId = snap.data().invitingFriendId;
const invitingFriendRef = db.collection('users').doc(invitingFriendId);
return invitingFriendRef.update("points", db.FieldValue.increment(50));
});
答案 0 :(得分:0)
您似乎正在尝试使用功能SDK来查询Cloud Firestore。那根本行不通。函数SDK仅用于声明函数触发器。您需要使用Firebase Admin SDK在函数触发时实际进行查询。
以最简单的方式要求firebase-admin:
const admin = require('firebase-admin');
然后使用它进行查询:
admin.firestore().documet("...").update(...);
FieldValue增量可以这样引用:
admin.firestore.FieldValue.increment()
答案 1 :(得分:0)
我看到了相同的错误消息,然后在将Firebase Functions更新到最新版本后设法与Firebase Functions一起使用。
npm install firebase-functions@latest firebase-admin@latest --save
npm install -g firebase-tools
https://firebase.google.com/docs/functions/get-started#set-up-node.js-and-the-firebase-cli
答案 2 :(得分:0)
我也正在为CloudCode写作。很高兴知道,firestore变量不一定要指向同一事物,因为它们只是名称。
A。这里的Firestore用于访问Firestore数据库并设置数据。但是,此Firestore不包含FieldValue:
/*
some other styles
*/
.linkStyle {
background-color: brown;
color: '#fff';
padding: '10px'
}
B。而是包含FieldValue,而不是包含在上面的Firestore的admin.firestore()中,而是包含在此处的firestore对象中:
// The Firebase Admin SDK
const admin = require('firebase-admin')
admin.initializeApp()
//const firestore db, comes after initialize app
const firestore = admin.firestore()
C。因此,完成以上操作后,您现在可以使用我们拥有的两个不同的Firestore变量,代码B用于获取FieldValue,代码A用于更新数据库
const FieldValue = require('firebase-admin').firestore.FieldValue
答案 3 :(得分:0)
在firebase函数中更新文档时尝试调用递减时遇到了同样的问题。 然后我看到了这两个API文档
https://firebase.google.com/docs/reference/admin/node/admin.firestore.FieldValue
https://firebase.google.com/docs/reference/js/firebase.firestore.FieldValue
与firebase.firestore.FieldValue不同,管理版本没有递增/递减方法。不知道为什么会这样。 因此,我首先使用get()读取值,然后使用update()减去。