gpt4 book ai didi

node.js - 「 'expireAfterSeconds' 选项仅在 '_ts' 字段上受支持。 」 显示错误

转载 作者:行者123 更新时间:2023-12-03 23:27:54 28 4
gpt4 key购买 nike

我在 node.js 中使用 cosmos db 进行 session 存储。宇宙数据库版本是 3.6 。

我执行以下代码。

const expressSession = require("express-session");
const MongoStore = require("connect-mongo")(expressSession);
const store = new MongoStore({
mongooseConnection: mongoose.connection,
ttl:24 * 60 * 60 * 1000,
})

结果,显示以下消息。
  (node:16068) UnhandledPromiseRejectionWarning: MongoError: The 'expireAfterSeconds' option is supported on '_ts' field only.

这个问题的解决方案是什么?

最佳答案

CosmosDB 是与 MongoDB 不同的服务器实现,并且某些功能和行为有所不同。

Cosmos 目前仅支持 Cosmos 的 internal modification timestamp field _ts 上的 TTL 索引:

_ts is a Cosmos DB-specific field and is not accessible from MongoDB clients. It is a reserved (system) property that contains the timestamp of the document's last modification.



由于 connect-mongo 使用名为 expires 的字段作为 ttl 值,因此默认情况下它不适用于 Cosmos。

但是,您可以通过使用 connect-mongocompatibility mode 来解决此问题,该方法在 Node 应用程序中使用效率较低的基于计时器的方法,而不是 MongoDB 服务器支持的 native TTL 索引:
const store = new MongoStore({
mongooseConnection: mongoose.connection,
ttl:24 * 60 * 60 * 1000,
autoRemove: 'interval',
autoRemoveInterval: 10 // Value in minutes (default is 10)
})

您可以使用 autoRemoveInterval 选项调整计时器间隔,该选项设置运行查询以删除过期文档的频率。

关于node.js - 「 'expireAfterSeconds' 选项仅在 '_ts' 字段上受支持。 」 显示错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59638751/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com