FieldValue.increment不是函数

时间:2019-10-16 16:36:56

标签: google-cloud-firestore google-cloud-functions

我花了几个小时尝试使用云功能来更新存储在我的应用程序中的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));
});

4 个答案:

答案 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()减去。