我的 mongodb 有一个 user 的表,里面的结构和部分数据如下
_id | userid | username | sex | class | height | updated |
---|---|---|---|---|---|---|
mongodb自动生成的id | 637 | wonda | f | class23 | 155 | 0 |
当更新这条数据的时候,希望不是直接在这条数据上更新,而是这条数据只更新 updated
,将其更新成 1
,同时插入一条新的数据,数据内容来自这条数据的旧的内容和更新后的内容,比如将 height
更新成 185
,完成后表中的数据应该是这样的
_id | userid | username | sex | class | height | updated |
---|---|---|---|---|---|---|
mongodb自动生成的id | 637 | wonda | f | class23 | 155 | 1 |
mongodb自动生成的id | 637 | wonda | f | class23 | 185 | 0 |
我现在用的解决方案是
- 先将旧数据的
updated
更新成1
- 将这条旧数据中没有更新的数据读出来,然后和新数据一同插入到表中
过程大致是这样的
await db.user.update({userid:userid},{$set:{updated:1}})
let olddb = db.user.find({userid:userid})
await db.user.insert({
username: olddb.username,
height: 185
})
这样的情况该如何优化呢?多谢
我觉得这
一个问题,update=1的这条记录你留着干什么用?没用了直接扔到别的表去不就行了吗,在这儿添什么乱。本来大家都用日志类的手段处理这件事没毛病的,你这是把历史记录和当前数据混合存放了然后还想优化...
不管处于什么原因,当数据变化后如果数据的性质变了就应该放到这种数据该去的地方。虽然你列出的字段不多,但是大致是学生信息之类的,无非是
别想用一张表解决所有问题,自然效率就上去了,空间换时间是有道理的。