将XXX.db.bson_serializer.ObjectID.createFromHexString(id)外包给函数?

我经历了这个快速教程。 我想知道是否有可能将以下呼叫外包给一个单独的function,因为它非常长?

employee_collection.db.bson_serializer.ObjectID.createFromHexString(id) 

这是调用语句的整个文件:

 var Db = require('mongodb').Db; var Connection = require('mongodb').Connection; var Server = require('mongodb').Server; var BSON = require('mongodb').BSON; var ObjectID = require('mongodb').ObjectID; EmployeeProvider = function(host, port) { this.db = new Db( 'node-mongo-employee', new Server(host, port, {}), {safe: true} ); this.db.open(function(){}); }; ... // find an employee by id EmployeeProvider.prototype.findById = function(id, callback) { this.getCollection( function(error, employee_collection) { if( error ) callback(error) else { employee_collection.findOne( {_id: employee_collection.db.bson_serializer.ObjectID.createFromHexString(id)}, function(error, result) { if( error ) callback(error) else callback(null, result) } ); } } ); }; ... exports.EmployeeProvider = EmployeeProvider; 

它是一个快速应用程序的控制器。 它缩短了,但应该给你一个它的function。 你可以在Github上find整个应用程序。

我试过了

 getid = function( employee_collection, id ) { return employee_collection.db.bson_serializer.ObjectID.createFromHexString(id); }; 

并用函数调用

 {_id: getid(employee_collection, id), 

但是我得到了一个很长的ENOENT错误。

假设你正在使用基本的node.js mongodb驱动程序,并且你有id本质上就像一个请求参数,这意味着它只是一个string,看起来像这样:

 "53cfba87e248860d16e1f7e1" 

然后在这里使用的导入:

 var ObjectID = require('mongodb').ObjectID; 

给你一个直接的function使用。 只要这样做:

 employee_collection.findOne({ "_id": ObejctID(id) },function(err,result) { // work in here }); 

您正在导入的ObjectID已经实现了这个function。