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

Сортировка по виртуальному полю в mongoDB (mongoose)

Допустим, у меня есть схема с таким виртуальным полем.

var schema = new mongoose.Schema(
{
    name: { type: String }
},
{
    toObject: { virtuals: true },
    toJSON: { virtuals: true }
});

schema.virtual("name_length").get(function(){
    return this.name.length;
});

В запросе можно ли сортировать результаты по виртуальному полю? Что-то вроде

schema.find().sort("name_length").limit(5).exec(function(docs){ ... });

Когда я пытаюсь это сделать, результаты просто не отсортированы...


Ответы:


1

Вы не сможете сортировать по виртуальным полям, потому что они не сохраняются в базе данных.

Виртуальные атрибуты — это атрибуты, которые удобно иметь под рукой, но которые не сохраняются в mongodb.

http://mongoosejs.com/docs/2.7.x/docs/virtuals.html

19.11.2012
  • Я знаю, что такое виртуальные атрибуты и что они не хранятся в БД. Я бродил, может быть, есть какой-то плагин или специальный метод, который вызывает все геттеры для виртуальных атрибутов, а затем сортирует документы. Я предполагаю, что нет такой вещи. 19.11.2012
  • Итак, я думаю, мое решение должно заключаться в сортировке и ограничении в javascript после получения результатов? 19.11.2012
  • и я предполагаю, что вы не можете использовать виртуальные машины в состоянии поиска? 19.11.2012
  • зависит от того, сколько записей у вас есть... вам в основном нужно будет получить все элементы, а затем отсортировать. Что, если у вас есть миллионы / вы хотите просмотреть результаты, будет неэффективным 19.11.2012
  • ну, я думаю, что результатов может быть не миллионы, а тысячи, и мне нужно их отсортировать... 19.11.2012
  • Разве вы не можете просто сохранить name_length в документе? Затем вы можете сортировать на этой стороне БД... делать это при вставке/обновлении документа? 19.11.2012
  • к сожалению, мой реальный случай сложнее имени. Мой виртуальный вычисляется в зависимости от информации о вошедшем в систему пользователе. 19.11.2012
  • Арван, это была вечность, но здесь точно такая же проблема, мне нужно вычисляемое поле, зависящее от других полей, и я должен использовать его как поле сортировки. Любое решение? 29.01.2016
  • Этот ответ просто говорит, что это невозможно. Кто-нибудь нашел способ сортировки по виртуальному атрибуту? В моем случае array.length 04.03.2020
  • @chovy, поскольку виртуальное свойство не хранится в mongodb, вам придется сделать это после запроса или сохранить значение array.length как фактическое свойство. 07.03.2020
  • Новые материалы

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

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

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

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

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

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

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