我使用云函数geofirestore查询了'users/userid/pros'firestore集合,并从查询中获得了一些特定的文档('users/userid/pros/proid'(。现在,我想在从查询中获得的每个特定文档下添加一个新的"notifs"集合。以下是我实现该功能的代码。
const functions = require('firebase-functions');
const admin = require('firebase-admin');
var GeoFirestore = require('geofirestore').GeoFirestore;
admin.initializeApp();
const firestore = admin.firestore();
const geofirestore = new GeoFirestore(firestore);
exports.sendNotification = functions.firestore
.document("users/{userId}/clients/{client}")
.onCreate(async snapshot => {
const clientfield = snapshot.data().field;
const clientgeopoint = snapshot.data().g.geopoint;
const geocollection = geofirestore.collectionGroup('pros');
const query = geocollection.near({center: clientgeopoint, radius:
10}).where('field', '==', clientfield);
await query.get().then( querySnapshot => {
querySnapshot.forEach(async doc => {
await doc.ref.collection('notifs').add({
'field': clientfield, ... });
});
}).catch ((error) =>
console.log(error)
);
})
但这段代码给了我一个错误"TypeError:无法读取云函数控制台上未定义的属性"collection"。我如何修复我的代码,以便在每个特定文档下添加"notifs"集合,如图所示?谢谢
DocumentSnapshot
在字段中携带它们的引用;对于Node.JS - ref
和对于Dart - reference
。您应使用它来执行该文件中的任何操作。假设代码是用NodeJS编写的,为了创建子集合,
query.get().then(querySnapshot => {
querySnapshot.forEach(doc => {
// frame your data here
await doc.ref.collection('notifs').add({ ... });
})
});
我认为您试图错误地获取querysnapshot数据。从穆图的回复来看,它应该看起来像这个
let querySnapshot = await admin.firestore().collection('users').doc(userid).collection('pros').get();
querySnapshot.then(querySnapshot => {
querySnapshot.forEach(doc => {
// frame your data here
await doc.ref.collection('notifs').add({ ... });
});
});
如果要从快照中获取数据,则需要在.get之后添加.then((语句以正确引用查询。