node.js - 如何使用云功能在 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 ...
});
解决方案
以下应该可以解决问题。
请注意,我们使用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;
});
});
推荐阅读
- google-assistant-sdk - MediaTek 8516 SoM 支持“OK Google”唤醒词
- keras - 在深度学习模型中,如何获取输出相对于输入的偏导数?
- node.js - 特定文件更改时如何停止重新启动node.js服务器
- javascript - 如何在 iframe 中为具有可编辑属性的元素执行 onclick?
- javascript - 如何防止手机视图中的网页截图?
- ios - 用户登录后,使用我的个人资料选项卡动态更改登录选项卡
- android - 从后台服务中检索手机信号塔信息
- javascript - Braintree 集成 - 无法在服务器端代码中访问 javascript nonce
- sql - 得到以下查询的错误答案
- git - 如何避免在git中合并狐步