MongoDB在持久对象之间的原型inheritance

我很好奇,如果MongoDB有select保存一个对象与另一个对象(在同一模式)作为其“原型”。 例如:

假设我们在db中有一个对象,像这样

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

我想要做的是得到这个对象,并更新电子邮件(例如)

所以新的对象会变成这样:

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

正如你可以看到这里有一个重复的数据(即名称和姓氏属性)。

我想要做的只是保存差异,然后对象将在电子邮件道具和原始对象像这样

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

我知道我可以直接更新对象或保存对象的新副本,但我想有不变性,不保存整个对象,我只想保存从原来的差异。

这样的事情是可能的(这是我的意思是mongo支持和优化这样的一个)? (或通过一些像mongoose或类似的东西)

还是我必须自己实施呢?

欢呼声,布吉

它被称为$set操作符,它是一个更新操作符,仅用于修改指定的字段,因此您不必通过networking传递整个对象来保留它:

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

所以这是更新通常如何工作。 而不是replace整个文档,而是使用更新操作符来修改所需的部分。

MongoDB提供了一个低级的界面来更新操作,几乎如图所示。 你似乎正在谈论的一部分是在这之上的一个软件层,为你做出那些“差异化”的决定。 这些被称为对象文档映射器或ODM解决scheme,是对象关系映射器或ORM的对应物。

这不是MongoDB的工作,因为它是精益和灵活的。 处理任何进一步交互的工作被认为是委托给软件库而不是服务器。 所以你会发现,像“mongoose”这样的一些图书馆正是如此。 如果你修改一个对象,那么“delta”被检测到,只有变化被发送到服务器。

因此,您可以“重新发明轮子”,您可以非常欢迎您进行此操作,也可以查看已使用所提供基本操作的技术“已构build于”之上的解决scheme。

没有MongoDB不支持这个,你将不得不自己实现这个。

inheritance是对象系统的一个特性,但是MongoDB使用的是只是巧妙地使用对象表示法(BSON)的文档。