Собственный драйвер mongoDb для node.js не может удалить конкретный документ - PullRequest
3 голосов
/ 04 января 2012

У меня есть следующая проблема:

В моем приложении у меня есть модель для всех моих сессий в mongoDb-DB.

Идея состоит в том, что модель наследует от абстрактной модели... так что мне больше не нужно писать все стандартные функции ... как, например, получение коллекции и т. д.

Так вот код моего sessionModel:

var baseProvider = require('./abstract/model').abstractProvider;
var queryString = require('querystring');
var _collection = 'sessions';

sessionProvider = function() {
     baseProvider.apply(this, [_collection]);
};

sessionProvider.prototype = new baseProvider(_collection);

sessionProvider.prototype.deleteSession = function(sessionId){
    this.getCollection(function(err,sessionCollection){
       sessionCollection.remove({_id: sessionId},function(err,result){
           console.log(err,result);
       });
    });

}

exports.sessionProvider = sessionProvider;

Затем в моем baseProvider (моя «абстрактная модель»):

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;

abstractProvider = function(collectionName) {
  var dbName = process.settings['shopconfig'].db.dbName;
  var dbHost = process.settings['shopconfig'].db.dbHost;
  var dbPort = process.settings['shopconfig'].db.dbPort;
  this.db= new Db(dbName, new Server(dbHost, dbPort, {auto_reconnect: true}, {}));
  this.db.open(function(){});
  this.collectionName = collectionName;
};


abstractProvider.prototype.getCollection= function(callback) {
  this.db.collection(this.collectionName, function(error, abstractCollection) {
    if( error ) callback(error);
    else callback(null, abstractCollection);
  });
};

exports.abstractProvider = abstractProvider;

Я ve shortend the codeparts to the important parts, don не раздражаюсь.

Проблема в том, что функция remove выполняется, вызывается обратный вызов, но объект err и объект результата не определены.

Является ли ложным вызов метода remove для коллекции таким образом?

Я немного озадачен ... потому что все остальное работает просто отлично ... вставка материала, обновление и т. Д.

Редактировать: Кстати, SessionID заполнен, я уже посмотрел этопотому что я думал, может быть, это будет пусто ... но это не так.Даже вызов метода remove () без критериев не удался ...

спасибо за ваше время.=)

1 Ответ

0 голосов
/ 21 февраля 2012

Является ли sessionId экземпляром ... db.bson_serializer.ObjectID или вы помещаете его в структуру сеанса, которая преобразует его в шестнадцатеричную строку? Последнее происходит с магазинами Cookie и Redis в Express, а также с хранилищем cookie в целом. Возможно, стоит проверить, есть ли там ссылка на БД:

sessionId = (typeof sessionId == "string")
    ? new db.bson_serializer.ObjectID(sessionId)
    : sessionId
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...