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

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

消息:“投射到ObjectId失败值”gl9-V-bjAjqv2Nwdf9vHPLN_Fnnl4Thz“path”_id“

快速会话使用以下函数来生成会话ID:

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

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

mongodb文档说_id应该是

ObjectId是一个12字节的BSONtypes的ObjectId

我已经尝试使用会话中的genid选项覆盖会话ID,但覆盖不会将其放入数据库中。

我怎样才能得到一个有效的_id到文档上或用无效的_id查询文档?

谢谢!

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

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

但是基本上,mongoose希望_id字段的“types”是一个ObjectId ,就像“自动收集”一样。 mongo-connect中间件本身不使用mongoose方法,而是使用底层驱动程序方法。 所以在使用内部方法时没有这个问题。

因此你的mongoose模式定义应该如下所示:

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

或者至less包含{ "_id": false }以删除默认的自动生成行为。