Новичок в 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
Любая идея, что мне может не хватать в коде?
Спасибо!
Попробуйте изменить это:
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));
Потому что в Javascript не является ошибкой объявлять объект таким образом, не присваивая его переменной.
Ах понял. Благодарю за разъяснение!
Спасибо! Я только что обнаружил это сам, прежде чем я увидел ваш ответ! В любом случае, большое спасибо за ваши быстрые ответы! Я использую VS Code и решил включить опцию «автосохранение при изменении фокуса» в настройках. Это было причиной моего падения! VS Code автоматически добавил круглые скобки с помощью моего плагина проверки, и я полностью пропустил это! Никаких ошибок относительно этого объекта в круглых скобках не возникает, что интересно. Любая идея, почему это может происходить?