首页 > 解决方案 > 如何使用云功能在 Firestore 中输入数据?

问题描述

对于文档 {userID},我想创建一个名为“notfications”的子集合并为其设置数据。如何访问文档和设置数据?

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

exports.updateUser = functions.firestore
.document('users/{userID}/reports/{reportID}')
.onUpdate((change, context) => {
  // Get an object representing the document
  // e.g. {'name': 'Marie', 'age': 66}
  const newValue = change.after.data();
  // ...or the previous value before this update
  const previousValue = change.before.data();

  // access a particular field as you would any JS property
    const st1 = newValue.status;
   const st2 = previousValue.status;
   console.log('I am a log entry!' + st1 + " " + st2);
   // Add a new document in collection "cities"


var db = admin.firestore();

    var data = {
    reportid: '4O8UWUPm3yJfOIdTam9S',
    problem: 'It works',
    status: 'status'
};

// Add a new document in collection "cities" with ID 'LA'
var setDoc = db.ref(`/users/${newValue}/notifications/n1`).set(data);

      // perform desired operations ...
    });

标签: node.jsfirebasegoogle-cloud-firestoregoogle-cloud-functions

解决方案


以下应该可以解决问题。

请注意,我们使用set(),因此我们必须设置新notification文档的 id:这里我们取值“n1”,如您的问题所示。您可以通过调用add()(在notifications集合上)而不是set().

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

const db = admin.firestore();

exports.updateUser = functions.firestore
  .document('users/{userID}/reports/{reportID}')
  .onUpdate((change, context) => {
    const newValue = change.after.data();
    const previousValue = change.before.data();

    const userID = context.params.userID;

    const st1 = newValue.status;
    const st2 = previousValue.status;
    console.log('I am a log entry!' + st1 + ' ' + st2);

    var data = {
      reportid: '4O8UWUPm3yJfOIdTam9S', //Here, get the value of the reportID by doing: reportid: context.params.reportID,
      problem: 'It works',
      status: 'status'  //Here, if necessary, you could use the value of st1, i.e. the new status
    };


    return db
      .collection('users')
      .doc(userID)
      .collection('notifications')
      .doc('n1')
      .set(data)
      .catch(error => {
        console.log('Error writing document: ' + error);
        return false;
      });
  });

推荐阅读