我有這個功能可以更新我的任務集合。問題是如何使用 $push 將新值添加到特定附件的陣列中。
架構
const taskSchema = mongoose.Schema({
projectId: {
type: mongoose.Schema.Types.ObjectId,
ref: 'projectModel',
},
attachments: [
{
fileThumbnail: { type: String },
name: { type: String },
size: { type: Number },
uploadDate: { type: String },
status: {
type: Boolean,
default: true,
},
},
],
});
任務控制器
export const updateTaskById = async (req, res) => {
try {
const {
_id,
projectId,
attachments,
} = req.body;
const task = await taskModel.findById(req.params.id);
if (task) {
task.invitedPeopleId = invitedPeopleId || task.invitedPeopleId;
}
await task.save({
validateBeforeSave: false,
});
} catch (error) {
console.log(error.message);
}
};
我試過的解決方案
taskModel.updateOne(
{ projectId: projectId },
{ $push: { attachments: attachments } },
);
uj5u.com熱心網友回復:
您可能將模型和模式混為一談,這是一個常見的誤解。
您創建了一個架構,但沒有從該架構編譯模型。這就是您編譯模型的方式。
const Task = mongoose.model('task', TaskSchema, 'tasks')
export default Task
然后,在您的 中taskController,匯入模型以操作檔案。
import Task from '../models/task.model.js'
最后,使用updateOne方法修改檔案:
Task.updateOne(
{
projectId: 1,
},
{
$push: {
attachments: {
name: 'file4',
size: 4,
},
},
}
)
這個Mongo playground演示了更新。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/361385.html
標籤:猫鼬
