# #javascript #google-cloud-firestore #google-cloud-functions
Вопрос:
Я изучаю облачные функции firebase с помощью JavaScript,
Я получаю снимок запроса из коллекции документов, каждый документ содержит поле идентификатора и поле сообщения.
Сейчас я застрял в том, что каждый раз, когда я просматриваю коллекцию, я хочу иметь возможность просто вынимать поле идентификатора из каждого объекта и сохранять его.
Я перепробовал все способы, которые я могу придумать, которые появляются в Google, и переполнение стека не работает для меня, я явно делаю что-то не так.
Я совершенно новичок в JavaScript, так что это может быть легко исправить, если у кого-то есть какая-либо информация
Это мой код в visual studio, который я использую, который отлично работает, откуда я могу видеть, чтобы добраться до коллекции, которая мне нужна
// onDelete is my trigger which would then go and fetch the collection that I want
exports.onDelet = functions.firestore.document('recentMsg/currentuid/touid/{documentId}').onDelete(async(snap, context) => {
const data = snap.data();
const contex = context.params;
// once I get the information from onDelete the following code starts
await admin.firestore().collection(`messages/currentuid/${contex.documentId}`)
.get()
.then((snapshot) => {
//this array will hold all documents from the collection
const results = []
const data = snapshot.docs.map((doc) => ({
id: doc.id,
...doc.data(),
}));
results.push(data)
console.log(results)
//This is one of the ways I've tried
//results.forEach((doc) => {
//console.log(doc.id)
//this is a print out in the terminal
// > undefined
// } );
});
Ниже находится распечатать, что я получаю в терминале, который находится вся информация, которую он содержит, который является большим,
Но на самом деле все, что я хочу иметь массив, который содержит каждый идентификатор
если есть только одно значение в массиве, я знаю, что это не будет проблемой, но ведь есть объект с несколькими значениями, что это проблема.
i functions: Beginning execution of "onDelet"
> [
> [
> { id: '28ZyROMQkzEBBDwTm6yV', msg: 'sam 2' },
> { id: 'ixqgYqmwlZJfb5D9h8WV', msg: 'sam 3' },
> { id: 'lLyNDLLIHKc8hCnV0Cgc', msg: 'sam 1' }
> ]
> ]
i functions: Finished "onDelet" in ~1s
еще раз приношу извинения, если это глупый вопрос, я новичок.
Комментарии:
1. Хотел бы знать, в чем проблема с этим
const data = snapshot.docs.map((doc) => ({ id: doc.id }));
2. @Umer Малик ,
results.push(data)
не нужен,data
это массив данных, прокомментируйте это, и ваш прокомментированный фрагмент должен работать3. Ваши данные являются возвращаемым массивом.
map()
Метод создает новый массив, заполненный результатами.4. ах хорошо, спасибо за информацию
Ответ №1:
С await admin.firestore().collection(
помощью сообщений/currentuid/${contex.documentId} ) .get()
вы получаете QuerySnapshot
сообщение, которое поддерживает forEach
и не map
поддерживает . Просто напишите свой код вот так:
// onDelete is my trigger which would then go and fetch the collection that I want
exports.onDelet = functions.firestore.document('recentMsg/currentuid/touid/{documentId}').onDelete(async(snap, context) => {
const data = snap.data();
const contex = context.params;
// once I get the information from onDelete the following code starts
await admin.firestore().collection(`messages/currentuid/${contex.documentId}`)
.get()
.then((snapshot) => {
//this array will hold all documents from the collection
const results = []
snapshot.forEach((doc) =>{
results.push({id:doc.id,...doc.data()})
});
console.log(results)
//This is one of the ways I've tried
//results.forEach((doc) => {
//console.log(doc.id)
//this is a print out in the terminal
// > undefined
// } );
});
Я предполагаю, что messages/currentuid/${contex.documentId}
это коллекция, а не один документ.
Вы можете прочитать об этом подробнее здесь.
Комментарии:
1. да, это коллекция, спасибо за помощь, я понимаю, что вы имеете в виду после того, как я использовал ваш код, работает так же