Javascript 使用Node.JS在Mongo DB中存储JS函数时出现问题

Javascript 使用Node.JS在Mongo DB中存储JS函数时出现问题,javascript,node.js,mongodb,Javascript,Node.js,Mongodb,我有一个简单的JS类: var User = function(id){ this._id = id; this.sayHello = function (){ return "hello"; } } 然后,我使用默认的Node.js驱动程序将其存储在MongoDB中: users.insert(new User(1)); 最后,我检索用户,并尝试执行该函数: users.findOne({_id:1}, function(err, item) {

我有一个简单的JS类:

var User = function(id){
    this._id = id;
    this.sayHello = function (){
        return "hello";
    }
}
然后,我使用默认的Node.js驱动程序将其存储在MongoDB中:

users.insert(new User(1));
最后,我检索用户,并尝试执行该函数:

users.findOne({_id:1}, function(err, item) {
    console.log("Say hello: " + item.sayHello());
});
我收到以下错误,这确实令人困惑:

    throw err;
          ^
TypeError: Object #<Object> has no method 'sayHello'
抛出错误;
^
TypeError:对象#没有方法“sayHello”
我完全不明白这一点。我的理解是MongoDB按原样存储JS函数和属性。如果不是这样,你能推荐我如何解决这个问题吗


谢谢

Mongo不能存储函数(代码),只能存储数据。获取原始数据并将其传递给构造函数,或者考虑像蒙哥马多的ODM。


有一组非常特定且有限的条件,您可以在其中以字符串形式发送mongo函数代码,并在服务器上对其进行评估。这些记录在中。然而,在mongo中运行的代码的目的是支持复杂的数据查询操作,而不是建模应用程序逻辑,这正是这个问题所要问的。应用程序逻辑位于node.js模块
.js
文件中。数据进入数据库。

您的示例通过mongo shell为我工作。没有任何错误,sayHello()也被正确调用。@zeusdeux问题是关于两个进程:mongodb和一个单独的node.js应用程序服务器进程。mongo shell是一个开发实用程序。这个问题是关于在node.js中构建应用程序的。@peter是的,我知道了。对象方法在存储之前被序列化,因此无论从哪里执行,结果都不应该有所不同,无论是从mongo客户端还是节点应用程序。我今天会在一个应用程序里试试,只是为了确定一下。我同意这个编辑。分离应用程序逻辑和它所处理的数据。将数据发送到应用程序中模块中的mongodb和应用程序逻辑。