mongodb update数据updatedAt时间不更新问题

今天在写一个koa项目的时候,需要操作mongoDB修改数据,参考之前一些旧项目的代码,他是这样update数据的:

直接把要更新的数据传入进去,这样数据也是可以更新成功,但是会有一个问题,updateAttimestamps永远不会更新(因为我需要用到这个时间来做展示):

Google之后发现很多解释都不是针对这个问题的。我又换了save(), findOneAndUpdate()等方法,发现还是有这个问题。

解决办法:
我把这个update方法重写了一下:

发现竟然可以了!

其实我本来是想用javascript的__展开语法(Spread syntax)__重写updateTime这个值的,结果误打误撞的解决了这个问题:

1
2
3
4
5
6
7
8
/**
* 根据_id lib
* @param {string} data lib数据结构
* @return {object} 返回更新结果{ n: 1, nModified: 1, ok: 1 }
*/
update (data) {
return libs.findOneAndUpdate({ _id: data._id }, { $set: {...data, ...{ updateTime: Date.now() } } })
}

虽然这种方法也可以正常更新updateTime, 但是当我发现是因为缺少$set更新操作符后,就觉得没有必要再多此一举重写updateTime了。

之后我又去仔细看了一下文档,里面确实有写这个$set 更新操作符(Update Operators)是必须的:

Update Operators:
Update Operators

总结发现果然文档才是最好的学习资料,借鉴一些旧项目可以快速上手,但是如果想到对所用到的技术有更深的理解的话,还是需要仔细阅读官方文档才行。之前参考的旧项目也是前端同事写的,前端同事接触数据库较少,代码中存在问题的可能性大,所以不要盲目的复制、粘贴。