【问题标题】:The native mongoDb driver for node.js fails at removing a specific docnode.js 的本机 mongoDb 驱动程序无法删除特定文档
【发布时间】:2012-01-04 17:22:28
【问题描述】:

我有以下问题:

在我的应用程序中,我的 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不要生气。

问题是,removefunction 被执行,回调被调用,但是 err-object 和 result-object 是未定义的。

以这种方式在集合上调用 remove 是错误的吗?

我有点困惑……因为其他一切都很好……插入东西、更新等等。

编辑: SessionID 已填充 btw,我已经看过了,因为我认为它可能是空的...但不是。即使在没有条件的情况下调用 remove() 也会失败...

感谢您的宝贵时间。 =)

【问题讨论】:

    标签: node.js mongodb


    【解决方案1】:

    sessionId 是 ...db.bson_serializer.ObjectID 的实例,还是您将其推入会话结构中,将其转换为十六进制字符串?后者发生在 Express 中的 Cookie 和 Redis 存储以及一般的 cookie 存储中。可能值得检查您是否有数据库引用:

    sessionId = (typeof sessionId == "string")
        ?新的 db.bson_serializer.ObjectID(sessionId)
        : sessionId

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2015-03-23
      • 1970-01-01
      • 1970-01-01
      • 2015-01-30
      • 2022-01-22
      • 2016-11-09
      • 1970-01-01
      相关资源
      最近更新 更多