Запрос Mongoose возвращает пустой

#node.js #mongodb #mongoose

#node.js #mongodb #мангуст #mongoose

Вопрос:

Я пытаюсь создать Node.js Конечная точка API для возврата некоторых значений для заполнения элемента управления select.

У меня есть следующий документ в коллекции под названием projectStatusValues…

 {
  "_id": {
    "$oid": "5cab4b2b38802527df2f7ab2"
  },
  "projectStatusDesc": [
    "Complete",
    "Pre-Start",
    "Active"
  ]
}
  

И моя модель Mongoose определяется как…

 const projStatusModel = mongoose.model("projectStatusValues", {
    "projectStatusDesc": [
        String
    ]
});
  

Наконец, я использую этот код для извлечения значений массива…

 app.get('/v1/projStatus', async (request, response) => {
    try {
        var status = await projStatusModel.find().exec();
        response.send(status);
    } catch (error) {
        response.status(500).send(error);
    }
});
  

Конечная точка выглядит хорошо, и я получаю ответ 200, но возвращается пустая строка. Есть идеи?

Спасибо!

Комментарии:

1. Кстати, вы не указываете идентификатор проекта. Переведите консольный журнал в статус. Не имеет смысла, что это вернет строку, find не возвращает строк.

2. Спасибо за ваш комментарий. Мне не нужно возвращать идентификатор проекта здесь. Что возвращает find? Я ожидаю JSON, который является строкой, верно?

3. Find вернет массив со всеми найденными документами в виде объектов javascript

Ответ №1:

Вы упускаете Schema

 const Schema = mongoose.Schema;
const projStatusModel = mongoose.model("projectStatusValues", new Schema ({
    "projectStatusDesc": [
        String
    ]
}));

  

Комментарии:

1. Спасибо за это. Пробовал, но все равно возвращает пустую строку. У меня есть другие API, которые, похоже, отлично работают без определения схемы, просто используя только model, как в моем примере. Должен ли я всегда определять схему? Каковы последствия того, что я не определил его, учитывая, что без моего другого API все работает нормально?

2. Я не знал, что это будет работать без схемы, но поскольку в документации каждый раз используется схема, я бы предложил сделать то же самое. Я заметил, что вы назвали модель projectStatusValues и используете в своем контроллере как projStatusModel . Это специально?

3. projectStatusValues — это имя коллекции

4. Я называю модель projStatusModel при определении как константу и при использовании в контроллере.

Ответ №2:

Переименовал коллекцию из projectStatusValues в projectstatusvalues, и это сработало.