почему мое поле метки времени становится картой времени после встраивания данных в список карты? - PullRequest
1 голос
/ 22 января 2020

Я пытаюсь встроить некоторые документы событий в поле в пользовательском документе с именем upcomingEvents (список карт).

поэтому сначала я запрашиваю документы событий, которые будут встроены в пользовательский документ, например * 1004. *

const willStartSoonEventsSnapshot = await db.collection('events')
        .where("createdBy","==", event.createdBy)
        .where("isActive","==", true)
        .where("hasBeenApproved","==", true)
        .where("dateTimeStart",">",now)
        .limit(7)
        .orderBy("dateTimeStart","asc")
        .get()

и затем я обновляю поле upcomingEvents в пользовательском документе, используя код ниже

        const upcomingEvents = []

        willStartSoonEventsSnapshot.forEach( doc => {
            upcomingEvents.push(doc.data())
        })

        // trying to log createdAt field
        console.log(upcomingEvents[0].createdAt)


        db.doc(`users/${event.createdBy}`).update({
            upcomingEvents
        })

, как вы можете видеть на изображении ниже, первоначально в коллекции events, createdAt поле имеет тип данных timestamp

enter image description here

, но после того, как я запустил приведенный выше код, и данные были успешно внедрены в пользовательский документ в поле upcomingEvents (список карты), созданное время будет на карте, а не в метке времени, как это

enter image description here

, как вы можете видеть из кода выше, я пытаюсь Записать созданную временную метку, и вот результат. есть данные в типе метки времени enter image description here

Я использую облачную функцию firebase для запуска кода выше

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

, поэтому мое поле метки времени становится карта такая? могу ли я сохранить его в типе отметки времени?

Ответы [ 2 ]

0 голосов
/ 22 января 2020

Я воспроизвел это так:

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

main =  async function () {
    const db = admin.firestore();
    const col_timestamp = await db.collection("col_timestamp").get();

    const  array = [];

    col_timestamp.forEach(doc => {
        array.push(doc.data())
    })

    db.doc("col_timestamp/copy/test_collection/timestamp_copy").update({array});
}
main();

И в результате у меня есть отметка времени, подобная этой: enter image description here

Я думаю, что я воспроизвел все операция, которую вы опубликовали здесь, поэтому, до того, как update изменил свойства, должны были быть сделаны некоторые дополнительные операции.

Надеюсь, это поможет!

0 голосов
/ 22 января 2020

Из предоставленных вами данных кажется, что свойство поля даты потеряно. Проверьте код, если данные подвергаются строковому форматированию и анализируются обратно. Потому что, если в записи есть поле даты и вы распечатаете его, вы увидите, что оно выглядит примерно так:

{dateField: {наносекунд: 5651654613, секунд: 21356883213}}

Это дата, полученная в результате запроса из магазина. И если свойства будут утеряны, то Firestore не будет рассматривать это как объект даты.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...