Как получить определенное значение поля из объекта из массива в Javascript

# #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. да, это коллекция, спасибо за помощь, я понимаю, что вы имеете в виду после того, как я использовал ваш код, работает так же