Я просматривал различные другие подобные вопросы и просто не могу понять, почему я не могу поместить объект из двух чисел в массив.
Примеры, с которых я пытался копировать:
Mongoose findOneAndUpdate: обновить объект в массиве объектов
Как поместить массив объектов в массив в mongoose одним вызовом?
Параметры строки Mongoose .find
И официальные документы: https://mongoosejs.com/docs/api.html#mongoosearray_MongooseArray-push
Это моя схема
const BatchSchema = new mongoose.Schema({
title: {
type: String,
required: true,
trim: true
},
envRecord: {
type: [{
tmp: {
type: Number
},
hum: {
type: Number
}
}],
}
});
BatchSchema.plugin(timestamp);
const Batch = mongoose.model('Batch', BatchSchema);
module.exports = Batch;
Мой push-код выглядит так:
server.put('/batches/:title', async(req, res, next) => {
//Check for JSON
if (!req.is('application/json')) {
return next(new errors.InvalidContentError("Expects 'application/json'"));
}
try {
const batch = await Batch.findOneAndUpdate(
{ _title: req.params.title },
req.body,
batch.envRecord.push({ tmp, hum })
);
res.send(200);
next();
} catch(err) {
return next(new errors.ResourceNotFoundError(`There is no batch with the title of ${req.params.title}`));
}
});
Используя post man, я использую PUT для отправки следующего JSON в теле
http://xxx.xx.xx.xxx:3000/batches/titleGoesHere
{
"tmp": 20,
"hum": 75
}
Что меня смущает, так это то, что все примеры, которые я нашел, используют $push
, но официальные документы, похоже, больше этого не используют, а вместо этого используют MongooseArray.prototype.push()
, поэтому я был пытаюсь сослаться на мой как batch.envRecord.push({ tmp, hum })
Да. Я проверил, совпадает ли заголовок, и партию можно найти с помощью
server.get('/batches/:title', async(req, res, next) => {
try {
const batch = await Batch.findOne({title: req.params.title});
res.send(batch);
next();
} catch(err) {
return next(new errors.ResourceNotFoundError(`There is no batch with the title of ${req.params.title}`));
}
});