Nano Hash - криптовалюты, майнинг, программирование

Мангуст удалить из коллекции без модели

В моей MongoDB есть коллекция sessions, созданная модулем. В коллекции нет модели или чего-либо еще, поскольку она не создана Mongoose.

Как я могу получить доступ к этой коллекции, не указывая ее модель?

Я пробовал следующее:

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

Хотя я получил ошибку: Cannot read property 'remove' of undefined

25.06.2016

  • Возможный дубликат stackoverflow.com/a/10519504/3284355 см. в редактировании правильного ответа. Вы можете использовать собственный пакет драйверов mongo, так как он уже установлен 25.06.2016

Ответы:


1

Запрос коллекции напрямую решит только часть вашей проблемы.

Судя по всему, вы используете 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.

25.06.2016
  • Ваши предположения верны. Я использую express-session с connect-mongo для управления сеансами. В POST к моему API выхода из системы мне нужно уничтожить эти сеансы. Мне удалось сделать это, вызвав req.session = null внутри моего API и установив unset: 'destroy' в настройках сеанса. Хотя есть одна небольшая проблема; моя домашняя страница (app.get('/',...)) обслуживает другую страницу, если req.session.userId не определено. По какой-то причине мне нужно дважды обновить мою страницу после вызова API выхода из системы, чтобы он был отключен. 25.06.2016
  • @Fizzix, можете ли вы проверить в базе данных, был ли сеанс, принадлежащий ключу сеанса, удален после запроса маршрута выхода? Или, возможно, req.session.destroy() работает лучше? 25.06.2016
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..