我怎样才能从node.js保存一个存储的javascript到mongodb中

以下一段代码:

var mongo = require('mongodb'); var db = new mongo.Db('test', new mongo.Server('127.0.0.1', 27017, {})); var callback = function (e, result) { if (e) { console.log(e); process.exit(1); } console.log(result); process.exit(0); } db.open(function (e) { if (e) callback(e); db.collection('system.js', function (e, coll) { if (e) callback(e); coll.save({ "_id" : "myFunction", "value" : "function myFunction() { return 123; }" }, function (e) { if (e) callback(e); db.eval("myFunction()", [], function (e, result) { if (e) callback(e); callback(undefined, result); }); }); }); }); 

输出:

 [Error: eval failed: invoke failed: JS Error: TypeError: myFunction is not a function nofile_a:0] 

我发现问题与包装函数定义的引号(“”)有关。

在mongo-cli上:

 > db.system.js.find() { "_id" : "myFunction", "value" : "function myFunction() { return 123; }" } 

但是之后:

 > db.system.js.save({_id : "myFunction", value : function myFunction() { return 123; }}); 

 > db.system.js.find() { "_id" : "myFunction", "value" : function cf__5__f_myFunction() { return 123; } } 

db.eval(“myFunction()”),工作!

所以,我的问题是:如何使用node-mongodb-native驱动程序从node.js保存存储过程?

在阅读关于驱动程序数据types的文档之后,我意识到不是将string与代码一起传递,而是需要传递一个mongo.Code对象:

 { "_id" : "myFunction", "value" : new mongo.Code("function myFunction() { return 123; }") }