gpt4 book ai didi

javascript - 持久化对象之间的 MongoDB 原型(prototype)继承

转载 作者:太空宇宙 更新时间:2023-11-04 01:01:43 26 4
gpt4 key购买 nike

我很好奇 MongoDB 是否可以选择将一个对象与另一个对象(在同一架构中)一起保存作为其“原型(prototype)”。例如:

假设我们在数据库中有一个像这样的对象

{
name : 'foo',
lastName : 'bar',
email : 'foo_bar@baz.com'
}

我想做的是获取这个对象并更新电子邮件(例如)

所以新对象将变成这样:

{
name: 'foo',
lastName : 'bar',
email : 'some_other_email@baz.com'
}

正如您所看到的,这里有重复的数据(即 name 和 lastName 属性)。

我想做的是只保存差异,这样对象就会位于电子邮件 Prop 上,并像这样重新引用原始对象

{
email : 'some_other_email@baz.com',
__proto__ : originalObjectId //or whatever
}

我知道我可以直接更新对象或保存对象的新副本,但我希望具有不变性,而不是每次都保存整个对象,我只想保存与原始对象的差异。

这样的事情可以开箱即用吗(我的意思是 mongo 是否支持并优化这样的事情)? (或者通过一些像 Mongoose 之类的库)

或者我必须自己实现它吗?

干杯,布吉

最佳答案

它被称为 $set运算符,它是一个更新运算符,旨在仅修改指定的字段,因此您不必通过网络传递整个对象来保留它:

db.collection.update(
{ "_id": idOfObjectOrOtherQuery },
{ "$set": { "email": "some_other_email@baz.com" }
)

这就是更新通常的工作方式。您可以使用 update operator 而不是替换整个文档。相反,只修改您需要的部分。

MongoDB 提供了一个低级接口(interface)来更新操作,几乎如图所示。您似乎正在谈论的部分内容是在此之上的软件层,可以为您做出这些“不同”的决定。这些被称为对象文档映射器或 ODM 解决方案,与对象关系映射器或 ORM 相对应。

这不是 MongoDB 的工作,因为它应该精益并且灵活。处理任何进一步交互的工作被认为委托(delegate)给软件库而不是服务器。因此,您会发现某些库(例如“mongoose”)完全按照所显示的进行操作。如果您修改对象,则会检测到“增量”,并且仅将更改发送到服务器。

因此,您可以“重新发明轮子”,我们非常欢迎您这样做,或者您可以查看已经“构建在”使用所提供的基本操作的技术之上的解决方案。

关于javascript - 持久化对象之间的 MongoDB 原型(prototype)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26399711/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com