使用云函数中的节点矩在 firestore 查询中执行不稳定
Instable execution in firestore query using node moment in cloud function
下面的代码运行在一个函数中正常,但奇怪的是,在其他函数中return出错。这两个函数在同一项目中使用节点 16 和 运行。集合中的字段是时间戳。
...
const moment = require('moment-timezone');
...
var timeInit = moment.tz(new Date(), 'America/Sao_Paulo');
timeInit.startOf("day");
var timeEnd = moment.tz(await addDays (new Date(), 1), 'America/Sao_Paulo');
timeEnd.startOf("day");
const ref = db.collection("myCollection");
const snapshot = await ref.where('fieldtime', '>=', timeInit)
.where('fieldtime', '<', timeEnd)
.get();
错误:参数“value”不是有效的 FieldValue。无法序列化“时刻”类型的对象。 Firestore 不支持具有自定义原型的 JavaScript 对象(即通过 'new' 运算符创建的对象)。
在 Object.exports。 [as isFieldValue] (/workspace/node_modules/@google-cloud/firestore/build/src/validate.js:89:23)
在 CollectionReference.where (/workspace/node_modules/@google-cloud/firestore/build/src/reference.js:1096:18)
编辑 1:
如果我使用.toDate(),如下:
console.log("timeInit format ", timeInit.format('DD-MM-YYYY HH:mm:ss'));
console.log("timeEnd format ", timeEnd.format('DD-MM-YYYY HH:mm:ss'));
console.log("timeInit todate ", timeInit.toDate());
console.log("timeEnd todate ", timeEnd.toDate());
控制台:
timeInit format 10-01-2022 00:00:00
timeEnd format 11-01-2022 00:00:00
timeInit todate 2022-01-10T03:00:00.000Z
timeEnd todate 2022-01-11T03:00:00.000Z
我是不是把UTC-3弄丢了?
错误信息是:
Couldn't serialize object of type "Moment"
Firestore 有自己的字段内部 Timestamp
对象。查询 Timestamp
字段时,您可以指定 Timestamp
作为值,也可以指定 Date
对象。但是(如错误所述)a Moment
既不是 Timestamp
也不是 Date
,因此它不能用作查询的值。
从这个问题来看,您似乎想要在 Moment
对象上调用 toDate()
以获得 Date
返回:Moment.js transform to date object
下面的代码运行在一个函数中正常,但奇怪的是,在其他函数中return出错。这两个函数在同一项目中使用节点 16 和 运行。集合中的字段是时间戳。
...
const moment = require('moment-timezone');
...
var timeInit = moment.tz(new Date(), 'America/Sao_Paulo');
timeInit.startOf("day");
var timeEnd = moment.tz(await addDays (new Date(), 1), 'America/Sao_Paulo');
timeEnd.startOf("day");
const ref = db.collection("myCollection");
const snapshot = await ref.where('fieldtime', '>=', timeInit)
.where('fieldtime', '<', timeEnd)
.get();
错误:参数“value”不是有效的 FieldValue。无法序列化“时刻”类型的对象。 Firestore 不支持具有自定义原型的 JavaScript 对象(即通过 'new' 运算符创建的对象)。 在 Object.exports。 [as isFieldValue] (/workspace/node_modules/@google-cloud/firestore/build/src/validate.js:89:23) 在 CollectionReference.where (/workspace/node_modules/@google-cloud/firestore/build/src/reference.js:1096:18)
编辑 1: 如果我使用.toDate(),如下:
console.log("timeInit format ", timeInit.format('DD-MM-YYYY HH:mm:ss'));
console.log("timeEnd format ", timeEnd.format('DD-MM-YYYY HH:mm:ss'));
console.log("timeInit todate ", timeInit.toDate());
console.log("timeEnd todate ", timeEnd.toDate());
控制台:
timeInit format 10-01-2022 00:00:00
timeEnd format 11-01-2022 00:00:00
timeInit todate 2022-01-10T03:00:00.000Z
timeEnd todate 2022-01-11T03:00:00.000Z
我是不是把UTC-3弄丢了?
错误信息是:
Couldn't serialize object of type "Moment"
Firestore 有自己的字段内部 Timestamp
对象。查询 Timestamp
字段时,您可以指定 Timestamp
作为值,也可以指定 Date
对象。但是(如错误所述)a Moment
既不是 Timestamp
也不是 Date
,因此它不能用作查询的值。
从这个问题来看,您似乎想要在 Moment
对象上调用 toDate()
以获得 Date
返回:Moment.js transform to date object