Object 在MongoDB中存储和检索JavaScript对象
我目前正在使用node mongo本机驱动程序处理node.js和MongoDB 我对使用Mongo控制台存储和检索JS对象进行了一些测试。我发现,如果我存储一个包含函数/方法的对象,那么这些方法和函数也将存储在集合中。这很有趣,因为我认为函数不能存储在MongoDB中(除了system.js集合,正如所建议的)。Object 在MongoDB中存储和检索JavaScript对象,object,mongodb,prototype,node.js,Object,Mongodb,Prototype,Node.js,我目前正在使用node mongo本机驱动程序处理node.js和MongoDB 我对使用Mongo控制台存储和检索JS对象进行了一些测试。我发现,如果我存储一个包含函数/方法的对象,那么这些方法和函数也将存储在集合中。这很有趣,因为我认为函数不能存储在MongoDB中(除了system.js集合,正如所建议的)。 此外,它不仅会存储方法,实际上还会存储对象整个原型链中的每个方法和成员。除此之外,我不喜欢这种行为,认为这是不直观的,我不能有这种行为 我打算在Mongo集合中管理用户。为此,我有一
此外,它不仅会存储方法,实际上还会存储对象整个原型链中的每个方法和成员。除此之外,我不喜欢这种行为,认为这是不直观的,我不能有这种行为 我打算在Mongo集合中管理用户。为此,我有一个User对象,其中包含所有的users方法,作为每个用户实例的原型。用户对象本身将只包含用户属性 如果我在Mongo集合中存储用户,我只想存储用户对象的自身属性。没有原型成员,尤其是没有原型方法。目前我不知道如何干净地做到这一点。我认为可能有效的选项有:
目前我会采用2/2的方法。我真的不喜欢它,但它是最有效的,也是唯一一个可以干净地使用API的。然而,我更希望听到API没有做错什么,但我不知道如何正确使用它。所以,请告诉我:)我不确定我是否完全明白你的问题。。。但我想到一件事:你有没有检查过猫鼬ORM?() 在定义模型和方法时,它为您提供了很多选择。特别是“虚拟”可能会引起兴趣()
不管怎样,希望它能帮助一些人 我最近才意识到,实际上可以在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中使用是安全的。我知道Mongoose。但是我不喜欢它。我想要的是在处理对象属性存储时使用Mongo和JavaScript的某种“最佳实践”。不是别的图书馆。不过,谢谢你的回答!我很高兴看到您能够在mongodb中使用JS函数存储对象(使用mongodb本机驱动程序?),但驱动程序似乎跳过了对象方法,只存储具有可接受类型(字符串、数字、数组、对象等)的属性。你做了什么特别的事吗?还是我看错了你的问题?你不能在MongoDB中存储这些方法。我正在做的是将Mongo驱动程序返回的JS对象上的原型替换成我想要的样子。这将允许它调用原型上存在的方法,就像它们存在于驱动程序返回的对象上一样。如果您在理解这一点上有困难,您应该阅读JS中原型继承是如何工作的。好的,感谢您的澄清,因为这一部分非常误导:“我发现,如果我存储一个包含functinos/methods的对象,那么这些方法和函数也将存储在集合中。这很有趣,因为我认为函数不能存储在MongoDB中(Mongo文档建议的system.js集合除外)。“--所以是的,函数不能存储在MongoDB中。