Запрос коллекции непосредственно будет решать только часть проблемы.
С учетом этого вы используете express-session
и connect-mongo
для управления сеансами. Это будет хранить данные сессии (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:
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
чтобы убедиться, что любые специальные символы экранированы надлежащим образом.
Обратите внимание, что это не быстрый запрос, особенно если у вас много сеансов в вашей базе данных.
EDIT: Я только что нашел вариант stringify
для connect-mongo
, который, если установлен в false
, следует записать данные сессии в качестве обычного объекта MongoDB, а не в виде строки JSON.
Возможный дубликат http://stackoverflow.com/a/10519504/3284355 см. Редактирование правильного ответа. Вы можете использовать собственный пакет драйверов mongo, поскольку он уже установлен. – Molda