mongodb 当操作日志的操作只有id时,这意味着什么?

ryoqjall  于 2023-02-18  发布在  Go
关注(0)|答案(2)|浏览(108)

我正在调查一个问题,其中一些数据似乎正在消失,而在看某个文档的操作日志,落在场景中,我注意到一个奇怪的操作,我不知道这意味着什么。

{
  lsid: {
    id: new UUID("foo"),
    uid: Binary(Buffer.from("foo", "hex"), 0)
  },
  txnNumber: Long("27"),
  op: 'u',
  ns: 'db.foo',
  o: { _id: ObjectId("foo") },
  o2: { _id: ObjectId("foo") },
  ...
}

o: { _id: ObjectId("foo") }对文档做了什么?

92vpleto

92vpleto1#

操作日志的格式没有文档记录,可以在次版本之间更改,因此依赖于它以某种形式包含特定数据是不可靠的。
如果您真的需要知道该结构的含义,就需要询问MongoDB开发人员或深入研究源代码。
如果您只需要知道节点上发生了哪些操作,请使用更改流

bnlyeluc

bnlyeluc2#

调试我的代码时,我发现这个操作确实是我的bug的原因,运行一个只指定_id的更新操作会从文档中删除除了_id之外的所有数据。
我在我的代码中发现了这个问题,这是一个使用mongoid gem的ruby应用程序,它生成了一个操作,试图在不传递块的情况下调用model.atomically,删除除了id之外的所有字段。

相关问题