防止在Mongoose findOneAndUpdate中更新更改
我更新了Mongoose模型,然后使用实现简单视图计数器的$inc
运算符检索:
const profile = await Profile.findOneAndUpdate({ userName }, { $inc: { viewsCount: 1 } });
Profile
架构启用了timestamps
选项。问题是updatedAt
在viewsCount
更新期间更新,这不是一个理想的行为。
我想在更新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
选项。问题是updatedAt
在viewsCount
更新期间更新,这不是一个理想的行为。
我想在更新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的意外行为更少。您对自己的代码的控制越多越好。希望这可以帮助!