首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在JavaScript中存储和检索MongoDB对象

问在JavaScript中存储和检索MongoDB对象
EN

Stack Overflow用户
提问于 2011-04-25 10:49:55
回答 2查看 8.6K关注 0票数 12

我目前正在使用节点-mongo本地驱动程序来处理node.js和MongoDB。

我使用Mongo控制台进行了一些测试,存储和检索JS对象。我发现,如果我存储一个包含函数/方法的对象,那么方法和函数也将存储在集合中。这很有趣,因为我认为函数不能存储在MongoDB中(除了蒙戈博士建议的system.js集合之外)。

此外,它不仅存储方法,而且实际上存储对象的整个原型链的每个方法和成员。此外,我不喜欢这种行为,认为这是不直观的,我不能有它。

我打算管理一个蒙古族的用户集合。为此,我有一个用户对象,它包含所有的用户方法,作为每个用户实例的原型。用户对象本身将只包含用户属性。

如果我在Mongo集合中存储一个用户,我只想存储用户对象自己的属性。没有原型成员,特别是没有原型方法。目前,我不知道如何干净地做到这一点。我认为可能有效的选择是:

  1. 使用foreach和hasOwnProperty创建浅拷贝,并将此副本存储在集合中。
  2. 向每个用户添加一个数据属性,该属性包含所有对象的属性,并且可以存储在集合中。
  3. 我刚刚想到了这一点:我还可以将所有的原型属性设置为不可枚举,这将阻止它们存储在集合中。

但是,我也遇到了同样的问题:当从集合中加载用户时。在JavaScript中创建对象原型之后,AFAIK无法更改其原型。而且,当Mongo实例化从集合中检索到的对象时,也无法指定要使用的原型。因此,基本上,我总是使用Mongo从对象继承的对象。据我所知,从现在开始,我有两个选项可以恢复可用的用户对象:

  1. 创建一个新对象,从用户继承并将结果对象上的每个属性复制到新创建的对象。(兼容存储机制1和3)
  2. 创建一个从用户继承的新对象,并将结果对象存储为新创建的对象上的数据属性。(与储存装置2兼容)

我的假设,特别是关于为查询结果指定原型的可能性,是正确的吗?什么是正确的方法,为什么?我肯定不是第一个使用MongoDB在node.js中存储和复活对象的人。

目前,我会采用2/2的方法,我不太喜欢它,但它是最有效的,也是唯一一种使用API的方法。然而,我更愿意听到API实际上没有做错什么,但我做的是不知道如何正确地使用它。所以,请告诉我:)

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-05-14 16:08:02

我最近才意识到,实际上可以更改V8/node中的对象原型。虽然这不是标准,但在各种浏览器中都是可能的,特别是在V8/node中!

代码语言:javascript
复制
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中使用是安全的。

票数 10
EN

Stack Overflow用户

发布于 2011-04-25 17:41:09

我不确定我是在跟踪你的问题。但是有一件事浮现在你的脑海中:你看过“猫鼬ORM”吗?(http://mongoosejs.com/)

在定义模型和方法时,它为您提供了许多选项。特别是“虚拟人”可能会引起人们的兴趣(http://mongoosejs.com/docs/virtuals.html)。

不管怎么说,希望它能帮上忙!

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5777641

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档