Mongo $ lookup возвращает пустой массив

При выполнении поиска $ в моих схемах он всегда возвращает пустой массив. Что я делаю неправильно?

Сбор результатов

const resultSchema = new mongoose.Schema({
  trial: {
    type: mongoose.Schema.Types.ObjectId,
    ref: 'Trial',
    required: true
  }
});

Пробная коллекция

const trialSchema = new mongoose.Schema({
  name: {
    type: String,
    required: true
  }
});

Совокупный

Result.aggregate([
    {
      $lookup: {
        from: 'trial',
        localField: 'trial',
        foreignField: '_id',
        as: 'x'
      }
    }
  ])
    .exec()
    .then(results => ({ results }))

"x" в конце всегда оказывается пустым массивом.

Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
0
0
1 536
3
Перейти к ответу Данный вопрос помечен как решенный

Ответы 3

проверьте название коллекции. В совокупной функции "испытание" начинается с нижнего регистра, в коллекции результатов "Пробное" начинается с верхнего регистра.

Спасибо за ответ! Изменил его на «Пробный» в поле поиска, не имеет никакого эффекта. Кроме того, функция заполнения работает с этими схемами, так что я думаю / надеюсь, что это не проблема.

Chop 18.03.2018 14:25

Посмотрите на отдельный документ в коллекции результатов в консоли mongodb. Может быть, мангуст использует странное форматирование

Artur P. 18.03.2018 14:57

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

Chop 18.03.2018 15:06
Ответ принят как подходящий

Хорошо, только что нашел ответ прямо здесь: https://stackoverflow.com/a/45481516/3415561

Поле «от» в поиске должно быть названием вашей коллекции, а не названием модели. Следовательно, это слово во множественном числе. Вот это

from: 'trials'

вместо

from: 'trial'

Также убедитесь, что тип поля должен быть таким же. Пример: - Строка со строкой, ObjectId с ObjectId

Smit Patadiya 21.02.2019 14:17

В моем случае я по ошибке поставил $ перед названием коллекции:

{$lookup: {
  from: '$users', // <- incorrect
  foreignField: '_id',
  localField: 'userid',
  as: 'users'
}},

это должно было быть

{$lookup: {
  from: 'users', // <- correct
  foreignField: '_id',
  localField: 'userid',
  as: 'users'
}},

Другие вопросы по теме