使用函数和Firestore时,FieldValue未定义

Chr*_*ris 25 javascript firebase google-cloud-functions google-cloud-firestore

我有以下功能:

const functions = require('firebase-functions');
const admin = require('firebase-admin');
const FieldValue = require('firebase-admin').FieldValue;

module.exports = functions.firestore
  .document('students/{studentId}')
  .onDelete(event => {
    const student = event.data.previous.data();
    const { id, semester } = student;
    const classId = student.class;
    const deleteObj = {};
    deleteObj[id] = FieldValue.delete(); //Line 12, this is where the error orccurs
    return admin
      .firestore()
      .collection('semesters')
      .doc(semester)
      .collection('students')
      .doc(classId)
      .update(deleteObj);
  });
Run Code Online (Sandbox Code Playgroud)

每次运行它我都会收到以下错误:

TypeError: Cannot read property 'delete' of undefined
    at module.exports.functions.firestore.document.onDelete.event (/user_code/deleteStudent.js:12:37)
Run Code Online (Sandbox Code Playgroud)

看着文档我真的不知道我做错了什么?

// Get the `FieldValue` object
var FieldValue = require("firebase-admin").FieldValue;

// Create a document reference
var cityRef = db.collection('cities').doc('BJ');

// Remove the 'capital' field from the document
var removeCapital = cityRef.update({
    capital: FieldValue.delete()
});
Run Code Online (Sandbox Code Playgroud)

更新

所以,使用网络等效似乎工作:admin.firestore.FieldValue.delete().但这似乎是一个bug,因为我在nodejs环境中?任何Firebaser都可以确认或拒绝这种情况吗?我很乐意提交错误报告.

Chr*_*ris 37

原来这是文档中的一个错误,应该是正确的导入 const FieldValue = require('firebase-admin').firestore.FieldValue;

更新

应该说Firebase会在几小时内回复并尽快纠正文档.

  • 我为此浪费了很多时间。感谢分享! (2认同)
  • 非常感谢你! (2认同)
  • 天哪,我希望我能早点找到这个答案。谢谢你救了我。 (2认同)
  • Firestore被可怕地记录在案。在完全不相关的函数的示例代码中,记录了FieldValue导入的唯一位置,网址为https://firebase.google.com/docs/firestore/manage-data/add-data#update_fields_in_nested_objects需要更好的文档! (2认同)

Abh*_* KA 14

有效!

需要 firebase 管理员

const admin = require('firebase-admin')
Run Code Online (Sandbox Code Playgroud)

添加这个常量

const fieldValue = admin.firestore.FieldValue; 
Run Code Online (Sandbox Code Playgroud)

现在使用

fieldValue.delete()
Run Code Online (Sandbox Code Playgroud)

更多参考:otcollect.com/post


Luc*_*aka 12

在这里你可以在github上找到解决方案。

使用打字稿

"firebase-admin": "^11.0.0"
"firebase-functions": "^3.22.0"
Run Code Online (Sandbox Code Playgroud)

你必须使用

import { FieldValue } from 'firebase-admin/firestore'
Run Code Online (Sandbox Code Playgroud)

同样适用于TimeStamp