我有一個關于我無法解決的問題的問題。我嘗試在我的貓鼬集合中更新推送通過 Query 傳遞的字串。我的收藏是這樣的:
{
"_id": {
"$oid": "6199288597e42bf84d017f9e"
},
"name": "Lisa",
"surname": "Bianchi",
"ID_school": "afbH598U3",
"classes": [
{
"class": "5A",
"activities": {
"in_progress": [],
"finisched": []
},
"_id": {
"$oid": "6199288597e42bf84d017f9f"
}
},
{
"class": "1A",
"activities": {
"in_progress": [],
"finisched": []
},
"_id": {
"$oid": "6199288597e42bf84d017fa0"
}
}
],
"email": "[email protected]",
"__v": 0
}
我嘗試在in_progress陣列中推送一個匹配的字串,例如,class:"5A"使用這種方式:
import db from "../models/index.js";
const Teacher = db.teacher
const updateActivity = (req, res) => {
const query = { _id: req.query.id};
const update = {$push:{'classes.$[group].activities.in_progress': req.query.data } };
const options = {arrayFilters: { 'group.class': req.query.class }};
Teacher.findOneAndUpdate(query, update, options).exec((err, data) => {
if (err) {
res.status(400).send({ message: err });
return;
} else {
res.status(200).send(data);
}
})
}
const API = {
updateActivity
}
export default API
查詢作業正常,但沒有推送任何內容。我在 Query 欄位中測驗了 whit Insomnia
id = 6199288597e42bf84d017f9e;
class:'5A';
data:"pushed"
有什么建議嗎?謝謝!
uj5u.com熱心網友回復:
通過傳入classes.class查詢來嘗試這種方式,并將推送更改為$push:{'classes.$.activities.in_progress': req.query.data }
const updateActivity = (req, res) => {
const query = { _id: req.query.id ,'classes.class': req.query.class};
const update = {$push:{'classes.$.activities.in_progress': req.query.data } };
Teacher.updateOne(query,update).exec((err, data) => {
if (err) {
res.status(400).send({ message: err });
return;
} else {
res.status(200).send(data);
}
})
}
uj5u.com熱心網友回復:
有兩種方法可以做到這一點:
選項 1:arrayFilters- 更靈活的Docu
您正在使用的選項。您有一個語法錯誤 - arrayFilters 應該是一個檔案陣列。
const updateActivity = (req, res) => {
const query = { _id: req.query.id };
const update = {
$push:{ 'classes.$[group].activities.in_progress': req.query.data }
};
// This MUST be an array of filter documents!
const options = { arrayFilters: [{ 'group.class': req.query.class }] };
Teacher
.findOneAndUpdate(query, update, options)
.exec((err, data) => {
if (err) {
res.status(400).send({ message: err });
return;
} else {
res.status(200).send(data);
}
});
}
選項 2:通過查詢(由@Saurabh Mistry回答)
重復他的回答以求完整
通過指定針對結果檔案中陣列中特定元素的查詢。
const updateActivity = (req, res) => {
const query = {
_id: req.query.id,
'classes.class': req.query.data,
};
const update = {
$push:{ 'classes.$.activities.in_progress': req.query.data }
};
Teacher
.findOneAndUpdate(query, update, options)
.exec((err, data) => {
if (err) {
res.status(400).send({ message: err });
return;
} else {
res.status(200).send(data);
}
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/373325.html
標籤:javascript 节点.js 反应 MongoDB 猫鼬
