mongo5.x版本oplog数据结构

op 数据的具体操作

  • i 代表insert
  • u 代表update
  • d 代表delete
    o 具体操作的数据内容
    o2 更新操作的update语句

1、无嵌套字段

1.1新增数据 {a:a,b:b}

{
    "op" : "i",
    "o" : {
        "_id" : "1",
        "a" : "a",
        "b" : "b"
    }
}

1.2更新字段{a:a->a:a1}

{
    "op" : "u",
    "o" : {
        "$v" : 2,
        "diff" : {
            "u" : {
                "a" : "a1"
            }
        }
    },
    "o2" : {
        "_id" : "1"
    }
}

1.3删除字段a

{
    "op" : "u",
    "o" : {
        "$v" : 2,
        "diff" : {
            "d" : {
                "a" : false
            }
        }
    },
    "o2" : {
        "_id" : "1"
    },
}

1.4新增字段{c:c}

{
    "op" : "u",
    "o" : {
        "$v" : 2,
        "diff" : {
            "i" : {
                "c" : "c"
            }
        }
    },
    "o2" : {
        "_id" : "1"
    }
}

1.5修改字段名{c:c->c1:c}

{
    "op" : "u",
    "o" : {
        "$v" : 2,
        "diff" : {
            "d" : {
                "c" : false
            },
            "i" : {
                "c1" : "c"
            }
        }
    },
    "o2" : {
        "_id" : "1"
    },
}

2.修改嵌套字段数据

2.1新增数据{a:{b:b,c:c}}

{
    "op" : "i",
    "o" : {
        "_id" : "2",
        "a" : {
            "b" : "b",
            "c" : "c"
        }
    },
}

2.2更新数据{a.b:b->a.b:b1}

{
    "op" : "u",
    "o" : {
        "$v" : 2,
        "diff" : {
            "sa" : {
                "u" : {
                    "b" : "b1"
                }
            }
        }
    },
    "o2" : {
        "_id" : "2"
    },
}

2.3删除字段a.b

{
    "op" : "u",
    "o" : {
        "$v" : 2,
        "diff" : {
            "sa" : {
                "d" : {
                    "b" : false
                }
            }
        }
    },
    "o2" : {
        "_id" : "2"
    },
}

2.4新增字段a.d:d

{
    "op" : "u",
    "o" : {
        "$v" : 2,
        "diff" : {
            "sa" : {
                "i" : {
                    "d" : "d"
                }
            }
        }
    },
    "o2" : {
        "_id" : "2"
    },
}

2.5修改字段名a.d:d->a.d1:d

{
    "op" : "u",
    "o" : {
        "$v" : 2,
        "diff" : {
            "sa" : {
                "d" : {
                    "d" : false
                },
                "i" : {
                    "d1" : "d"
                }
            }
        }
    },
    "o2" : {
        "_id" : "2"
    },
}

3、修改三级嵌套字段:

{
    "op" : "u",
    "o" : {
        "$v" : 2,
        "diff" : {
            "sa" : {
                "sb" : {
                    "u" : {
                        "d" : "d1"
                    }
                }
            }
        }
    },
    "o2" : {
        "_id" : "3"
    },
}

总结

1、mongo5版本o里面新增了$v属性2,mongo4版本该值为1

2、无嵌套属性的时候,操作的时候o里面diff标记了具体的i/u/d字段内容.mongo4版本为o里面 s e t 记 录 i / u 内 容 , set记录i/u内容, seti/uunset记录d字段内容

3、嵌套属性的时候,o里面diff内容记录了每个字段的变化情况,默认会在字段前面增加s.比如a.b发生变化会记录1级属性sa.二级属性记录了具体的i/u/d字段的内容。如果是三级属性发生变化的时候会记录1级属性sa,2级属性sb,三级属性里面记录具体i/u/d.以此内推。。。

问题:

1、当值为bool类型的时候就不知道是字段值改成false还是删除调了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值