首页 文章

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

提问于
浏览
1

我正在尝试从connect-mongo会话集合中手动删除文档 . 当我尝试删除文档时,我收到以下错误:

消息:'转换为ObjectId失败,因为值“gl9-V-bjAjqv2Nwdf9vHPLN_Fnnl4Thz”在路径“_id”处

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

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

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

mongodb文档说_id应该是

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

我试图使用会话上的genid选项覆盖会话ID,但是覆盖不会使其进入数据库 .

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

谢谢!

My Infrastructure :Express 4.10,Node v0.12.7,Compose.io,connect-mongo,express-session

1 回答

  • 2

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

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

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

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

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

相关问题