Функция сохранения вопроса NodeJS MongoDB создает пустые документы в коллекции

Новичок в MongoDB и некоторые базовые знания Node. Следуя онлайн-руководству по Node, Express и MongoDB. У меня есть код, который подключается к удаленному кластеру и вставляет документ в коллекцию. Соединение работает, но вставленный документ пуст, так как содержит только автоматически сгенерированный идентификатор. Вот код:

const DB = process.env.DATABASE.replace(
  '<PASSWORD>',
  process.env.DATABASE_PASSWORD
);
mongoose
  .connect(DB, {
    useNewUrlParser: true,
    useCreateIndex: true,
    useFindAndModify: false,
  })
  .then(() => console.info('DB Connection successful'));
 
const tourSchema = new mongoose.Schema();
({
  name: {
    type: String,
    required: [true, 'A tour must have a name'],
    unique: true,
  },
  rating: {
    type: Number,
    default: 4.5,
  },
  price: {
    type: Number,
    required: [true, 'A tour must have a price'],
  },
});
 
const Tour = mongoose.model('Tour', tourSchema);
 
const testTour = new Tour({
  name: 'aaaa',
  rating: 3.0,
  price: 397,
});
 
testTour
  .save()
  .then((doc) => {
    console.info(doc);
  })
  .catch((err) => console.info('ERROR:', err));

Вот результат:

Если я смотрю в Compass, я вижу созданный пустой документ, поэтому соединение работает. Могут ли быть какие-то другие параметры строки запроса для фактической строки подключения? Вот текущие параметры строки запроса для строки подключения MongoDB (они были по умолчанию): retryWrites=true&w=majority

Любая идея, что мне может не хватать в коде?

Спасибо!

Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
215
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Попробуйте изменить это:

const tourSchema = new mongoose.Schema();
({

к:

const tourSchema = new mongoose.Schema({
Ответ принят как подходящий

В строке 13 вы неправильно определяете свою схему, и в ней не определены сущности, потому что вы закрываете схему с помощью ; перед определением.

const DB = process.env.DATABASE.replace(
  '<PASSWORD>',
  process.env.DATABASE_PASSWORD
);
mongoose
  .connect(DB, {
    useNewUrlParser: true,
    useCreateIndex: true,
    useFindAndModify: false,
  })
  .then(() => console.info('DB Connection successful'));

const tourSchema = new mongoose.Schema()
  ({
    name: {
      type: String,
      required: [true, 'A tour must have a name'],
      unique: true,
    },
    rating: {
      type: Number,
      default: 4.5,
    },
    price: {
      type: Number,
      required: [true, 'A tour must have a price'],
    },
  });

const Tour = mongoose.model('Tour', tourSchema);

const testTour = new Tour({
  name: 'aaaa',
  rating: 3.0,
  price: 397,
});

testTour.save()
  .then((doc) => {
    console.info(doc);
  })
  .catch((err) => console.info('ERROR:', err));

Спасибо! Я только что обнаружил это сам, прежде чем я увидел ваш ответ! В любом случае, большое спасибо за ваши быстрые ответы! Я использую VS Code и решил включить опцию «автосохранение при изменении фокуса» в настройках. Это было причиной моего падения! VS Code автоматически добавил круглые скобки с помощью моего плагина проверки, и я полностью пропустил это! Никаких ошибок относительно этого объекта в круглых скобках не возникает, что интересно. Любая идея, почему это может происходить?

RefinedRascal 23.12.2020 02:37

Потому что в Javascript не является ошибкой объявлять объект таким образом, не присваивая его переменной.

Hamza Anis 23.12.2020 21:32

Ах понял. Благодарю за разъяснение!

RefinedRascal 24.12.2020 03:12

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