DBRefs可以包含额外字段吗?
在使用MongoDB的时候,我遇到了一些需要用到DBRefs的情况。不过,我也想在DBRef里缓存一些引用文档的字段。
{$ref:'user', $id:'10285102912A', username:'Soviut'}
举个例子,我可能希望即使用户文档是被引用的,我也能直接获取用户名。这样做可以让我享受到单个文档的好处,比如查询速度更快,而且不需要在代码里手动去解析引用。同时,我也可以在合适的地方使用引用。
我的想法是,当引用的文档被更新时(比如用户改了名字),我的业务层可以自动更新所有引用了这个文档的地方。
最终,我想知道在DBRefs上存储额外字段算不算好做法?这样做会不会出问题?每次引用被重写时,我的数据会不会丢失?像pymongo这样的驱动会支持吗?
1 个回答
5
最后,我想知道在我的数据库引用(DBRefs)上存储额外字段是否算是好做法?
可能把“缓存”和“引用”分开存储会更干净一些……这要看你的数据是什么样的。
每次重写引用时,我会丢失数据吗?
有可能,但只要你小心就不会。如果你在更新数据库引用的子对象,记得只更新你想要修改的特定字段,而不是把整个子对象都覆盖掉。
记住,引用其实就是普通对象。数据库引用是一个标准,而不是特殊类型。
像pymongo这样的驱动会支持吗?
驱动的解引用助手仍然可以正常工作。这些助手只是用$ref和$id字段做一个查找。