Монго и Мангуст — .find() возвращает разные значения

#mongodb #mongoose #mern

Вопрос:

Зашел в тупик, и это должно быть что-то предельно простое.

У меня есть приложение стека MERN, которое не находит данные от mongo, как ожидалось.

С внешнего интерфейса я публикую и обновляю документ. Я вхожу в интерфейс командной строки Mongo и вижу сохраненные данные.

Но в приложении Node Мангуст не возвращает полный документ.

Вот мой маршрут, чтобы получить документ-я даже пытаюсь протестировать получение всего.

 router.get("/", async (req, res) => {
  const user_email = req.query.user_email;
  const course_id = req.query.course_id;
  const test = await CourseProgressSchema.find({
    _id: "60acfd1c969cac0bd3a213a8",
  });
  console.log(test);
  try {
    let course_progress;
    if (user_email amp;amp; course_id) {
      course_progress = await CourseProgressSchema.findOne({
        user_email,
        course_id,
      });
      if (!course_progress) {
        const newCourseProgress = new CourseProgressSchema({
          user_email,
          course_id,
        });
        course_progress = await newCourseProgress.save();
      }
    } else if (user_email amp;amp; !course_id) {
      course_progress = await CourseProgressSchema.find({ user_email });
    } else if (course_id amp;amp; !user_email)
      course_progress = await CourseProgressSchema.find({ course_id });
    else {
      res.json({ error: "Not Found." });
    }
    console.log(course_progress);
    res.json({ success: course_progress });
  } catch (error) {
    console.log(error);
    res.json({
      error: "Soemthing went wrong when getting current course progress.",
    });
  }
});
 

course_progress утешается/возвращается как:

 [0] [
[0]   {
[0]     _id: 60acfd1c969cac0bd3a213a8,
[0]     user_email: 'nickisyourfan@icloud.com',
[0]     course_id: '60acfcfe969cac0bd3a213a7',
[0]     __v: 0
[0]   }
[0] ]

 

Но если я открою интерфейс командной строки mongo и использую db.courseprogressscchemas.find().pretty() его, он вернет обновленный документ:

 {
    "_id" : ObjectId("60acfd1c969cac0bd3a213a8"),
    "user_email" : "nickisyourfan@icloud.com",
    "course_id" : "60acfcfe969cac0bd3a213a7",
    "__v" : 0,
    "course_progress" : {
        "60acfca1969cac0bd3a213a5" : {

        }
    }
}

 

Вот моя схема — ничего особенного:

 const mongoose = require("mongoose");
const Schema = mongoose.Schema;

const CourseProgressSchema = new Schema({
  user_email: {
    type: String,
    required: true,
  },
  course_progress: {
    type: Object,
    required: true,
    default: {},
  },
  course_id: {
    type: String,
    required: true,
  },
});

module.exports = CourseProgress = mongoose.model(
  "CourseProgressSchema",
  CourseProgressSchema
);
 

Может ли кто-нибудь помочь мне понять, почему мангуст возвращает только часть документа, а не все целиком?

Ответ №1:

Мангуст по умолчанию не показывает пустые объекты. Чтобы получить их, вы должны установить minimize флажок false при создании схемы.

 const CourseProgressSchema = new Schema(
  {
    user_email: {
      type: String,
      required: true,
    },
    course_progress: {
      type: Object,
      required: true,
      default: {},
    },
    course_id: {
      type: String,
      required: true,
    },
  },
  { minimize: false }
);
 

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

1. Сделаю — я уверен, что это была моя проблема, большое спасибо!