最新消息: 电脑我帮您提供丰富的电脑知识,编程学习,软件下载,win7系统下载。

防止在Mongoose findOneAndUpdate中更新更改

IT培训 admin 11浏览 0评论

防止在Mongoose findOneAndUpdate中更新更改

我更新了Mongoose模型,然后使用实现简单视图计数器的$inc运算符检索:

const profile = await Profile.findOneAndUpdate({ userName }, { $inc: { viewsCount: 1 } });

Profile架构启用了timestamps选项。问题是updatedAtviewsCount更新期间更新,这不是一个理想的行为。

我想在更新updatedAt时禁用viewsCount更新,最好通过尽可能少的查询。

我假设Mongoose时间戳是通过预挂钩实现的。

qazxsw poi如何在不更新qazxsw poi的情况下增加qazxsw poi?

可以通过否定时间戳挂钩的效果来完成吗?

有类似的问题可以解决findOneAndUpdate更新的问题,但解决方案不适合这种情况。

回答如下:

在搜索Mongoose文档之后,似乎简短的答案是否定的,没有设置viewsCount字段就无法调用updatedAt。如果查看文档updatedAt,它会清楚地指出所有更新函数(findOneAndUpdate(),update()和bulkWrite())都将findOneAndUpdate()运算符添加到查询中以设置updatedAt。话虽这么说,你还有其他选择,我强烈推荐。

解决

将createdAt和updatedAt字段直接添加到模型中,并删除时间戳。当然,Mongoose为您处理它真的很好,但最后,如果您必须尝试更改特定用例的时间戳的设置功能,那么最好自己动手。

如果您喜欢在调用here或$set时设置updatedAt和createdAt,那么您可以随时编写自己的中间件来添加操作。

updatedAt

我知道这不是理想的解决方案,但坦率地说,我发现它更有用,因为它具有更强的控制力,而且Mongoose的意外行为更少。您对自己的代码的控制越多越好。希望这可以帮助!

防止在Mongoose findOneAndUpdate中更新更改

我更新了Mongoose模型,然后使用实现简单视图计数器的$inc运算符检索:

const profile = await Profile.findOneAndUpdate({ userName }, { $inc: { viewsCount: 1 } });

Profile架构启用了timestamps选项。问题是updatedAtviewsCount更新期间更新,这不是一个理想的行为。

我想在更新updatedAt时禁用viewsCount更新,最好通过尽可能少的查询。

我假设Mongoose时间戳是通过预挂钩实现的。

qazxsw poi如何在不更新qazxsw poi的情况下增加qazxsw poi?

可以通过否定时间戳挂钩的效果来完成吗?

有类似的问题可以解决findOneAndUpdate更新的问题,但解决方案不适合这种情况。

回答如下:

在搜索Mongoose文档之后,似乎简短的答案是否定的,没有设置viewsCount字段就无法调用updatedAt。如果查看文档updatedAt,它会清楚地指出所有更新函数(findOneAndUpdate(),update()和bulkWrite())都将findOneAndUpdate()运算符添加到查询中以设置updatedAt。话虽这么说,你还有其他选择,我强烈推荐。

解决

将createdAt和updatedAt字段直接添加到模型中,并删除时间戳。当然,Mongoose为您处理它真的很好,但最后,如果您必须尝试更改特定用例的时间戳的设置功能,那么最好自己动手。

如果您喜欢在调用here或$set时设置updatedAt和createdAt,那么您可以随时编写自己的中间件来添加操作。

updatedAt

我知道这不是理想的解决方案,但坦率地说,我发现它更有用,因为它具有更强的控制力,而且Mongoose的意外行为更少。您对自己的代码的控制越多越好。希望这可以帮助!

发布评论

评论列表 (0)

  1. 暂无评论