我目前正在使用节点-mongo本地驱动程序来处理node.js和MongoDB。
我使用Mongo控制台进行了一些测试,存储和检索JS对象。我发现,如果我存储一个包含函数/方法的对象,那么方法和函数也将存储在集合中。这很有趣,因为我认为函数不能存储在MongoDB中(除了蒙戈博士建议的system.js集合之外)。
此外,它不仅存储方法,而且实际上存储对象的整个原型链的每个方法和成员。此外,我不喜欢这种行为,认为这是不直观的,我不能有它。
我打算管理一个蒙古族的用户集合。为此,我有一个用户对象,它包含所有的用户方法,作为每个用户实例的原型。用户对象本身将只包含用户属性。
如果我在Mongo集合中存储一个用户,我只想存储用户对象自己的属性。没有原型成员,特别是没有原型方法。目前,我不知道如何干净地做到这一点。我认为可能有效的选择是:
但是,我也遇到了同样的问题:当从集合中加载用户时。在JavaScript中创建对象原型之后,AFAIK无法更改其原型。而且,当Mongo实例化从集合中检索到的对象时,也无法指定要使用的原型。因此,基本上,我总是使用Mongo从对象继承的对象。据我所知,从现在开始,我有两个选项可以恢复可用的用户对象:
我的假设,特别是关于为查询结果指定原型的可能性,是正确的吗?什么是正确的方法,为什么?我肯定不是第一个使用MongoDB在node.js中存储和复活对象的人。
目前,我会采用2/2的方法,我不太喜欢它,但它是最有效的,也是唯一一种使用API的方法。然而,我更愿意听到API实际上没有做错什么,但我做的是不知道如何正确地使用它。所以,请告诉我:)
发布于 2011-05-14 16:08:02
我最近才意识到,实际上可以更改V8/node中的对象原型。虽然这不是标准,但在各种浏览器中都是可能的,特别是在V8/node中!
function User(username, email) {
this.username = username;
this.email = email;
}
User.prototype.sendMail = function (subject, text) {
mailer.send(this.email, subject, text);
};
var o = {username: 'LoadeFromMongoDB', email: 'nomail@nomail.no'};
o.__proto__ = User.prototype;
o.sendMail('Hello, MongoDB User!', 'You where loaded from MongoDB, but inherit from User nevertheless! Congratulations!');这是所有不同的模块和插件-甚至核心模块使用这项技术,尽管它不是ECMAScript标准。所以我想在node.js中使用是安全的。
发布于 2011-04-25 17:41:09
我不确定我是在跟踪你的问题。但是有一件事浮现在你的脑海中:你看过“猫鼬ORM”吗?(http://mongoosejs.com/)
在定义模型和方法时,它为您提供了许多选项。特别是“虚拟人”可能会引起人们的兴趣(http://mongoosejs.com/docs/virtuals.html)。
不管怎么说,希望它能帮上忙!
https://stackoverflow.com/questions/5777641
复制相似问题