В MongoDB, ако трябва да изтриете документ в mongo shell, можете да използвате:
db.collection.remove()
методdelete
командаdb.collection.deleteOne()
методdb.collection.deleteMany()
метод
Тази статия предоставя примери за всеки.
db.collection.remove()
Метод
db.collection.remove()
метод премахва (т.е. изтрива) документи от колекция. Можете да изтриете всички документи, някои документи или един документ според изискванията.
Ето пример за изтриване на конкретен документ.
db.employees.remove({ "_id": 3 })
Резултат:
WriteResult({ "nRemoved" : 1 })
Това изтрива документа с _id
стойност на 3
от employees
колекция.
Не е задължително обаче да съответства на един документ. Критериите за филтриране могат да съответстват на множество документи и дори можете да оставите критериите за филтриране празни, за да съответстват на всички документи (т.е. да изтриете всички документи).
Ето пример за изтриване на всички документи:
db.employees.remove({})
Резултат:
WriteResult({ "nRemoved" : 5 })
Резултатът ни показва, че бяха премахнати пет документа (така че колекцията очевидно съдържаше пет документа, преди да ги изтрием всички).
remove()
методът също така приема justOne
параметър за ограничаване на премахването само до един документ. Това изтрива първия документ, който отговаря на критериите за изтриване.
Пример:
db.employees.remove({}, "justOne: true")
Резултат:
WriteResult({ "nRemoved" : 1 })
В този случай критериите ни за филтриране са празен документ и така той съответства на всички документи в колекцията. Само един документ обаче се изтрива, защото използваме justOne: true
.
delete
Команда
delete
командата прави точно същото нещо като remove()
метод. Всъщност, remove()
метод използва командата delete.
Ето пример за изтриване на конкретен документ с delete
команда.
db.runCommand(
{
delete: "employees",
deletes: [ { q: { _id: 4 }, limit: 1 } ]
}
)
Резултат:
{ "n" : 1, "ok" : 1 }
db.collection.deleteOne()
Метод
db.collection.deleteOne()
методът е подобен на db.collection.remove()
метод, с изключение на това, че изтрива само един документ от посочената колекция.
Той приема условие за филтър, точно като db.collection.remove()
.
Пример:
db.employees.deleteOne({ "_id": 4 })
Резултат:
{ "acknowledged" : true, "deletedCount" : 1 }
Това изтри служител номер 4.
Ако предоставите по-широк филтър, който връща множество документи, той изтрива само първия.
Например следното изтрива първия документ в колекцията, независимо колко документа има в колекцията:
db.employees.deleteOne({})
db.collection.deleteOne()
методът може да бъде удобен метод за използване, ако се притеснявате да не изтриете случайно множество документи. Най-много документи, които ще изтрие, е един, така че ако направите грешка „дебел пръст“, няма да премахнете случайно всички документи от колекцията (освен ако разбира се няма само един документ в колекцията).
db.collection.deleteMany()
Метод
db.collection.deleteMany()
методът е подобен на db.collection.deleteOne()
освен че може да изтрие множество документи.
Всъщност вероятно е по-скоро remove()
, защото може да премахне множество документи и един документ (въпреки че няма justOne
параметър като remove()
прави).
Този метод може да бъде удобен, ако искате да изтриете всички документи, които отговарят на даден критерий.
Пример:
db.employees.deleteMany({ "salary": { $gt: 80000 } })
Резултат:
{ "acknowledged" : true, "deletedCount" : 2 }
Това изтри всички документи, които имат salary
поле над 80000. В този случай само два документа съвпадат, но може да е произволен брой.
Можете също да използвате db.collection.deleteMany()
за да изтриете всички документи от колекцията.
Пример:
db.employees.deleteMany({})
Резултат:
{ "acknowledged" : true, "deletedCount" : 5 }
В този случай в колекцията имаше пет документа и всичките пет бяха изтрити.
Повече информация
Горните методи също приемат редица незадължителни аргументи, като writeConcern
и collation
.
deleteOne()
и deleteMany()
също така приемете hint
аргумент.
По-долу са връзки към документацията на MongoDB за всеки метод/команда:
db.collection.remove()
delete
db.collection.deleteOne()
db.collection.deleteMany()