#javascript #node.js #mongodb #express #mongoose
#javascript #node.js #mongodb #экспресс #mongoose
Вопрос:
Я новичок в веб-разработке и создаю приложение todo. У меня есть следующая схема и модель:
const tdSchema = new mongoose.Schema({
category: {
type: String,
required: true,
unique: true
},
tds: {
type: [{
type: String
}]
}
});
const ToDo = mongoose.model("ToDo", tdSchema);
Вот пример документа:
{ "_id" : ObjectId("5f7e2c3d1a151704382ce109"),
"todos" : [ "Update Resume", "Apply for jobs" ],
"category" : "Career", "__v" : 0 }
Я хотел бы удалить «Обновить резюме» из массива «todos», оставив все остальное в документе как есть.
Как мне это сделать с помощью Mongoose JS?
Ответ №1:
Сначала найдите документ:
const doc = await ToDo.findOne({ _id: "5f7e2c3d1a151704382ce109" });
console.log(doc); // optional (used to illustrate how code works)
Это будет регистрироваться:
{ "_id" : ObjectId("5f7e2c3d1a151704382ce109"),
"todos" : [ "Update Resume", "Apply for jobs" ],
"category" : "Career", "__v" : 0 }
Отсюда просто откройте «todos» и удалите из него так же, как вы удаляете из обычного массива JavaScript.
doc.todos = doc.todos.filter(e => e !== "Update Resume");
Затем сохраните документ:
const updated = await doc.save();
console.log(updated); // optional (used to illustrate how code works)
И вы получите это в своем журнале:
{ "_id" : ObjectId("5f7e2c3d1a151704382ce109"),
"todos" : [ "Apply for jobs" ],
"category" : "Career", "__v" : 0 }
Ответ №2:
Основываясь на ответе @Bilal Saleem, если вы хотите запустить только один запрос и убедиться, что он работает, если несколько человек одновременно делают запросы, вы можете сделать это в запросе обновления с помощью $pull
оператора.
Оператор $pull используется для удаления элементов из массива mongodb и поддерживает условия запроса для элементов, которые вы хотите извлечь.
const doc = await ToDo.updateOne(
{ _id: "5f7e2c3d1a151704382ce109" },
{
$pull: {
todos: "Update resume",
}
}
);
В приведенном выше случае это приведет $pull
к удалению из todos
массива и удалению любых элементов, равных "Update resume"