我无法更新mongodb文档中的数组(即使我一直处于200状态)。这是mongoDB的文档
{ "_id" : ObjectId("5c3f3a59bdbd208298139e23"), "time" : [ 6 ], "id" : 4, "date" : 1547388300000, "text" : "New nEw neW event", "createdAt" : ISODate("2019-01-16T14:06:17.688Z"), "updatedAt" : ISODate("2019-01-16T14:06:17.688Z"), "__v" : 0 }
我需要将一些数字添加到数组"time"
中。浏览stackoverflow一段时间后,我没有找到可以写mongoose
可以为我验证数据的查询的解决方案,所以我想出了这个临时代码
updateEventHeight(id) {
let updates = `{\"time\": [6, 7, 8]}`;
let newId = `{\"_id\" : ${id}}`;
this.props.updateEvent(newId, updates);
}
在我的父React组件中,我正在进行axios
调用
axios.post("/api/updateEvent", {
id: id,
update: updates
})
在服务器端,我有Express.js,用于处理更新请求,对MongoDB的响应
router.post("/updateEvent", (req, res) => {
const { id, update } = req.body;
Data.findOneAndUpdate(id, update, err => {
console.log(id);
console.log(update);
if(err) return res.json({ success: false, error: err });
return res.json({ success: true });
});
});
服务器控制台日志随附响应200。但是数据并未持久存储到数据库中。
GET /api/getEvents 304 4.579 ms - -
[0] GET /api/getEvents 304 4.590 ms - -
[0] {"_id" : 5c3f3a59bdbd208298139e23}
[0] {"time": [6, 7, 8]}
[0] POST /api/updateEvent 200 8.166 ms - 162
[0] GET /api/getEvents 304 3.318 ms - -
[0] GET /api/getEvents 304 3.316 ms - -
答案 0 :(得分:1)
这是我的代码示例,可用于查找项目并将其他注释添加到数组中。
Data.findOneAndUpdate(
{ _id: req.body._id },
{
$push: {
time: req.body.value
},
new: true
}
)
.then(doc => {
res.send(doc);
})
.catch(err => {
console.error(err);
});
});
如果您要处理进入数组的多个值以及$pushAll
,它们有不同的用途,那么您可能还想研究$each
,但可能会有所帮助。我在这里显示的方法是将新值推送到数据库中已经存在的数组上。