5

私は単純な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'

私はこれに完全に迷っています。私の理解では、MongoDBはJS関数とプロパティの両方をそのまま保存していました。そうでない場合は、これを回避する方法をお勧めしますか?

ありがとう!

4

1 に答える 1

9

Mongoは関数(コード)を保存できず、データのみを保存できます。取得した生データを取得してコンストラクター関数に渡すか、マングースのようなODMを検討してください。

非常に具体的で制限された一連の条件があり、文字列形式でmongo関数コードを送信し、サーバーで評価することができます。これらはMongoDBマニュアルに記載されています。ただし、mongo内で実行されるそのコードの目的は、この質問が求めているアプリケーションロジックをモデル化することではなく、高度なデータクエリ操作をサポートすることです。アプリケーションロジックは、node.jsモジュール.jsファイルに入ります。データはデータベースに入ります。

于 2013-03-15T01:22:06.900 に答える