DBRefs可以包含额外字段吗?

5 投票
1 回答
860 浏览
提问于 2025-04-15 23:04

在使用MongoDB的时候,我遇到了一些需要用到DBRefs的情况。不过,我也想在DBRef里缓存一些引用文档的字段。

{$ref:'user', $id:'10285102912A', username:'Soviut'}

举个例子,我可能希望即使用户文档是被引用的,我也能直接获取用户名。这样做可以让我享受到单个文档的好处,比如查询速度更快,而且不需要在代码里手动去解析引用。同时,我也可以在合适的地方使用引用。

我的想法是,当引用的文档被更新时(比如用户改了名字),我的业务层可以自动更新所有引用了这个文档的地方。

最终,我想知道在DBRefs上存储额外字段算不算好做法?这样做会不会出问题?每次引用被重写时,我的数据会不会丢失?像pymongo这样的驱动会支持吗?

1 个回答

5

最后,我想知道在我的数据库引用(DBRefs)上存储额外字段是否算是好做法?

可能把“缓存”和“引用”分开存储会更干净一些……这要看你的数据是什么样的。

每次重写引用时,我会丢失数据吗?

有可能,但只要你小心就不会。如果你在更新数据库引用的子对象,记得只更新你想要修改的特定字段,而不是把整个子对象都覆盖掉。

记住,引用其实就是普通对象。数据库引用是一个标准,而不是特殊类型。

像pymongo这样的驱动会支持吗?

驱动的解引用助手仍然可以正常工作。这些助手只是用$ref和$id字段做一个查找。

撰写回答