У меня есть схема Delivery
:
const DeliverySchema = new mongoose.Schema({
projectId: { type: String, default: "", trim: true },
tasks: [{
timestamp: { type: Date, default: new Date() },
isAssigned: { type: Boolean, default: false },
dr1Manager: { type: Schema.Types.ObjectId, ref: 'User' },
dr2Manager: { type: Schema.Types.ObjectId, ref: 'User' },
status: { type: String, default: "dr1", trim: true },
pair: { type: String, default: "", trim: true },
taskId: { type: String, default: "", trim: true },
files: [{
fileName: { type: String, default: "", trim: true },
path: { type: String, default: "", trim: true },
isFileApproved: { type: Boolean, default: false },
isOriginal: { type: Boolean, default: false },
}],
instructions: [{
step: { type: String, default: "dr1", trim: true },
text: { type: String, default: "", trim: true },
isChecked: { type: Boolean, default: false }
}],
}]
});
Я хотел бы знать, могу ли я $pull
данные из массива instructions
и изменить оставшиеся элементы в этом массиве в том же запросе,Я пытаюсь сделать это следующим образом:
await Delivery.updateOne(
{ projectId, "tasks.taskId": taskId },
{
"tasks.$[i].isAssigned": false,
"tasks.$[i].status": "dr1",
"tasks.$[i].dr1Manager": manager,
$pull: { "tasks.$[i].instructions": { step: "dr2" } },
"tasks.$[i].files.$[j].isFileApproved": false,
"tasks.$[i].instructions.$[k].isChecked": false
},
{
arrayFilters: [
{ "i.taskId": taskId },
{ "j.isFileApproved": true },
{ "k.isChecked": true }
]
}
);
В результате я получаю сообщение об ошибке:
Обновление пути \ 'задачи. $ [I] .instructions \'создаст конфликт в \' задачах. $ [i] .instructions \
Итак, как мне это сделать?