通过_id强制转换错误手动删除connect-mongo会话

时间:2015-08-18 02:20:03

标签: node.js mongodb mongoose express-session connect-mongo

我尝试从connect-mongo会话集合中手动删除文档。当我尝试删除文档时,出现以下错误:

  

消息:'强制转换为ObjectId的值" gl9-V-bjAjqv2Nwdf9vHPLN_Fnnl4Thz"在路径" _id"'

express-session使用以下函数生成会话ID:

function generateSessionId(sess) {
 return uid(24);
}

从此函数生成的会话正在进入会话文档的_id属性。但是,当您尝试通过生成的ID查找或删除文档时,您会收到错误。

mongodb docs说_id应该是

  

ObjectId是一个12字节的BSON类型   ObjectId

我尝试使用会话上的genid选项覆盖会话ID,但覆盖不会进入数据库。

如何在文档中获取有效的_id或使用无效的_id查询文档?

谢谢!

我的基础设施:Express 4.10,Node v0.12.7,Compose.io,connect-mongo,express-session

1 个答案:

答案 0 :(得分:2)

好的,这里你的问题是用于从会话存储中删除文档的mongoose模型。您可能应该调用req.session.destroy()或设置TTL来删除过期的会话。

但基本上,mongoose期望_id字段的“类型”为ObjectId,因此“autocasts”。 mongo-connect中间件本身不使用mongoose方法,而是与底层驱动程序方法进行对话。所以当使用它的内部方法时它没有这个问题。

因此,您的mongoose模式定义应如下所示:

var sessionSchema = new Schema({
    "_id": String,
    "session": String
},{ "_id" false });

或者至少包含{ "_id": false }以删除默认的自动投放行为。