Mongoose 中的 Mongo BSON 类型

Posted

技术标签:

【中文标题】Mongoose 中的 Mongo BSON 类型【英文标题】:Mongo BSON Types in Mongoose 【发布时间】:2016-07-08 18:45:56 【问题描述】:

如何使用 mongoose 使用 Timestamp() 和 mongodb docs 中提到的其他 mongo shell 操作?

如果我执行this 之类的操作,我会收到错误消息:

oplogModel.find(ts: $gte: lastTimestamp, $lt: Timestamp(currTimestam
                                                    ^
ReferenceError: Timestamp is not defined

【问题讨论】:

***.com/questions/10006218/… 可能重复? 不要更改原始表格中的问题。而是提出一个新问题。 【参考方案1】:

Timestamp 这样的对象在本机驱动程序包中定义。

可以通过调用mongoose.mongo引用底层节点原生驱动:

var mongoose = require('mongoose'),
    Timestamp = mongoose.mongo.Timestamp;

这将允许您设置导入并使用驱动程序中为 BSON 类型定义的函数。

请注意,shell 中的“并非所有”助手都可用。只有那些真正有意义的(例如 BSON 类型定义函数)才能在所有驱动程序中实际可用。

另请注意,在大多数情况下,您确实需要Date。这将是一个 BSON Date 对象,它实际上只是在内部存储为从纪元值开始的毫秒数。但当然会反序列化为 Date 对象,这将是相关语言最常用的对象。

Timestamp 是一个特例,在两者之间的存储上你并没有真正获得什么。

【讨论】:

var Timestamp = mongoose.mongo.TimeStamp; oplogModel.find(ts: $gte: lastTimestamp, $lt: Timestamp(currTimestam ^ TypeError: undefined is not a function 时间戳未定义。 @Shipra 这是mongoose.mongo.Timestamp。导入未使用正确的大小写。我的错字。 我可以使用 Date 对象或 epoch 时间戳来与存储在 oplog 中的 BOSON 时间戳进行比较吗? @Shipra 这不是你问的问题。底线是您要查询的任何 BSON 数据类型,即您必须提供的类型。请注意,当使用 mongoose 时,您可能不应该尝试在集合上设置模式,因为您可能会得到错误的类型。无论如何,这回答了您提出的问题。如果您还有其他问题,那么Ask Another Question @Shipra 不,你不会。不要改变你的问题。你还有一个问题要问,所以Ask another Question。从你所问的内容中改变你的问题是特别粗鲁和令人困惑的,因为现有的回答将脱离上下文。这不是在这里做得很好的那种行为。如果您想在这里获得良好的体验,请遵守规则。接受您的问题已得到回答,然后继续提出新问题。

以上是关于Mongoose 中的 Mongo BSON 类型的主要内容,如果未能解决你的问题,请参考以下文章

Mongo基础使用,以及在Express项目中使用Mongoose

go操作mongo

golang mongo-driver filter 构建--bson和golang基础类型

MongoError:在对嵌套文档中的记录进行分组时,无法从缺少的 BSON 类型转换为日期

org.bson.json.JsonParseException:JSON 阅读器期待一个值,但发现 ':' - Springboot 中的 Mongo 查询抛出此错误

Apache Zeppelin 中的 org/bson/conversions/Bson 错误