我正在研究其他各种类似的问题,但似乎无法理解为什么我不能将只有2个数字的对象推入数组。
我尝试从中复制的示例如下: Mongoose findOneAndUpdate: update an object in an array of objects How to push an array of objects into an array in mongoose with one call? Mongoose .find string parameters
以及官方文档:https://mongoosejs.com/docs/api.html#mongoosearray_MongooseArray-push
这是我的模式
Not in Constitution
我的推送代码如下:
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;
使用邮递员,我正在使用PUT在正文中发送以下JSON
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}`));
}
});
我有点困惑的是,我发现的所有示例都在使用http://xxx.xx.xx.xxx:3000/batches/titleGoesHere
{
"tmp": 20,
"hum": 75
}
,但是官方文档似乎不再使用它了,而是在使用$push
这就是为什么我试图将我的引用称为MongooseArray.prototype.push()
是的,我已经检查标题是否匹配并且可以使用
找到该批次batch.envRecord.push({ tmp, hum })
答案 0 :(得分:0)
您正在传递batch.envRecord.push({ tmp, hum })
作为findOneAndUpdate
的第三个参数,它代表查询选项对象。因此,仅在执行findOneAndUpdate
并对其save
之后才需要推入对象。这种方法的缺点是执行两个查询:
const batch = await Batch.findOneAndUpdate(
{ title: req.params.title },
req.body
).exec();
batch.envRecord.push({ tmp, hum });
batch.save();
这就是为什么使用$push
是首选方法的原因。