gpt4 book ai didi

node.js - Mongoose 从没有模型的集合中删除

转载 作者:太空宇宙 更新时间:2023-11-03 23:31:15 26 4
gpt4 key购买 nike

我的 MongoDB 有一个由模块创建的 sessions 集合。该系列没有模型或任何东西,因为它不是由 Mongoose 创建的。

如何在不指定模型的情况下访问此集合?

我尝试了以下方法:

mongoose.connection.db.sessions.remove({'session.userId': userId}, function(e, found) {
console.log(found);
res.json({success: true});
});

尽管我收到了错误:无法读取未定义的属性“删除”

最佳答案

直接查询集合只能解决部分问题。

从表面上看,您正在使用 express-sessionconnect-mongo 来管理 session 。这会将 session 数据 (req.session) 作为 JSON 字符串 存储在数据库中:

{
"_id": "fLBj_McMFM-7PwVNsv9ov88vOAgoNiDa",
"session": "{\"cookie\":{\"originalMaxAge\":null,\"expires\":null,\"httpOnly\":true,\"path\":\"/\"},\"userId\":\"my-user-id\"}",
"expires": ISODate("2016-07-09T08:47:38.156Z")
}

正如你所看到的,session是一个字符串,而不是一个对象,所以你不能直接使用session.userId查询它。

如果您无法使用req.session.destroy() ,您需要执行正则表达式查询来匹配 JSON 字符串中的用户 ID:

let collection = mongoose.connection.db.collection('sessions');
let query = new RegExp(`"userId":"${userId}"`);
collection.remove({ session : query }, function(e, found) {
console.log(found);
res.json({success: true});
});

如果首先运行 userId 类似 escape-string-regexp ,这可能是最好的选择以确保所有特殊字符都正确转义。

请注意,这不是一个快速查询,尤其是当您的数据库中有大量 session 时。

编辑:我刚刚找到了 stringify connect-mongo 的选项,如果设置为 false,则应将 session 数据作为常规对象写入 MongoDB,而不是 JSON 字符串。

关于node.js - Mongoose 从没有模型的集合中删除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38024837/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com