将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。