【问题标题】:How to get BSON UTC datetime value in Node / Javascript?如何在 Node / Javascript 中获取 BSON UTC 日期时间值?
【发布时间】:2022-11-10 14:50:33
【问题描述】:

我正在尝试在 MongoDB 时间序列集合中保存一个条目,但我无法正确存储 timeField,mongo 抛出错误。 MongoServerError: 'blockTime' must be present and contain a valid BSON UTC datetime value 如何将 Date 对象转换为 BSON UTC 日期时间?

下面是架构

import mongoose from "mongoose";

const tradeSchema = new mongoose.Schema(
  {
    blockTime: {
      type: Number,
    },
  },
  {
    timeseries: {
      timeField: "blockTime",
    },
  }
);

const Trade = mongoose.model("trade", tradeSchema);

export default Trade;

下面是产生错误的代码

const newTrade = new Trade({
  blockTime: new Date().valueOf(),
});

await newTrade.save();

【问题讨论】:

  • 尝试使用日期对象的valueOf 方法返回的值。 new Date().valueOf() 返回自 Unix 纪元开始以来的毫秒数。我希望 MongoDB 的(JS)驱动程序接受 JavaScript 数字作为输入。
  • 我仍然收到错误MongoServerError: 'blockTime' must be present and contain a valid BSON UTC datetime value

标签: javascript node.js mongodb


【解决方案1】:

显然,blockTime 的类型应该是 Date 而不是 Number,当我将类型更改为 Date 时,它​​起作用了

【讨论】:

  • 这对我在 MongoDb 论坛中对"Conversion from string to boson.date 的(接受的)回答中不理解的一行有意义:“...转换 [到 bson 日期类型] 仅在您为驱动程序提供适当的可转换数据类型时才会发生 -对于 NodeJS / JavaScript 应用程序,它是 Date 对象。”谢谢,现在有意义了。
【解决方案2】:

只需使用

blockTime: new Date()

Mongodb 将智能地处理其余部分。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-01-17
    • 1970-01-01
    • 1970-01-01
    • 2020-06-02
    • 1970-01-01
    • 2015-01-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多