我正在尝试从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 回答
好的,这里你的问题是用于从会话存储中删除文档的猫鼬模型 . 您可能应该调用
req.session.destroy()
或设置TTL来删除过期的会话 .但基本上,mongoose期待
_id
字段的"type"是ObjectId
,因此"autocasts" .mongo-connect
中间件本身不使用mongoose方法,而是与底层驱动程序方法进行对话 . 所以当使用它的内部方法时它没有这个问题 .因此,您的mongoose模式定义应如下所示:
或者至少包含
{ "_id": false }
以删除默认的自动投放行为 .