В данной статье мы рассмотрим процесс изменения документа в коллекции.
Для этих целей в MongoDB существуют методы update() и save(). Метод update() изменяет значения уже существующего документа в то время, как метод save() перезаписывает существующий документ.
Метод update()
Общий метод имеет следующий вид:
db.ИМЯ_КОЛЛЕКЦИИ.update(КРИТЕРИЙ_ВЫБОРА, ИЗМЕНЁННЫЕ_ДАННЫЕ)
Для понимания того, как это работает на практике, рассмотрим простой пример:
Предположим, что у нас есть коллекция developers, которая содержит следующие документы:
> db.developers.find().pretty()
{
"_id" : ObjectId("5815f4e735ee883c37ac8b4d"),
"title" : "Eugene Suleimanov",
"specialty" : "Java",
"skills" : [
"Java",
"Hibernate",
"Spring"
],
"salary" : 2000
}
{
"_id" : ObjectId("5815f4ec35ee883c37ac8b4e"),
"title" : "Ivan Ivanov",
"specialty" : "Java",
"skills" : [
"Java",
"Hibernate",
"Spring"
],
"salary" : 3000
}
{
"_id" : ObjectId("5815f4f535ee883c37ac8b4f"),
"title" : "Nikolai Nikolaev",
"specialty" : "C++",
"skills" : [
"C++",
"STL",
"SQL"
],
"salary" : 2500
}
Допустим, что мы хотим изменить поле salary у разработчика с именем Eugene Suleimanov. Для этого нам необходимо выполнить следующую команду:
> db.developers.update( {'title':'Eugene Suleimanov'}, {$set : { 'salary': 2500 }} )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Проверим содержимое коллекции developers после выполнения предыдущей команды:
> db.developers.find().pretty()
{
"_id" : ObjectId("5815f4e735ee883c37ac8b4d"),
"title" : "Eugene Suleimanov",
"specialty" : "Java",
"skills" : [
"Java",
"Hibernate",
"Spring"
],
"salary" : 2500
}
{
"_id" : ObjectId("5815f4ec35ee883c37ac8b4e"),
"title" : "Ivan Ivanov",
"specialty" : "Java",
"skills" : [
"Java",
"Hibernate",
"Spring"
],
"salary" : 3000
}
{
"_id" : ObjectId("5815f4f535ee883c37ac8b4f"),
"title" : "Nikolai Nikolaev",
"specialty" : "C++",
"skills" : [
"C++",
"STL",
"SQL"
],
"salary" : 2500
}
Как мы видим, запись была изменена.
Для того, чтобы изменить несколько записей необходимо установить параметр multi в значение true.
Изменим зарплату всем разработчикам, со специальностью Java:
> db.developers.update( {'specialty':'Java'}, {$set : { 'salary': 3500 }}, {multi: true} )
WriteResult({ "nMatched" : 2, "nUpserted" : 0, "nModified" : 2 })
Проверим нашу коллекцию developers ещё раз:
> db.developers.find().pretty()
{
"_id" : ObjectId("5815f4e735ee883c37ac8b4d"),
"title" : "Eugene Suleimanov",
"specialty" : "Java",
"skills" : [
"Java",
"Hibernate",
"Spring"
],
"salary" : 3500
}
{
"_id" : ObjectId("5815f4ec35ee883c37ac8b4e"),
"title" : "Ivan Ivanov",
"specialty" : "Java",
"skills" : [
"Java",
"Hibernate",
"Spring"
],
"salary" : 3500
}
{
"_id" : ObjectId("5815f4f535ee883c37ac8b4f"),
"title" : "Nikolai Nikolaev",
"specialty" : "C++",
"skills" : [
"C++",
"STL",
"SQL"
],
"salary" : 2500
}
Как мы видим – все разработчики со специальностью Java имеют зарплату 3500.
Метод save()
Данный метод используется для перезаписи уже существующего документа новым.
Данный метод имеет следующий синтаксис:
db.ИМЯ_КОЛЛЕКЦИИ.save( {_id:ObjectId(), НОВЫЕ_ДАННЫЕ} )
Для понимания того, как это работает на практике рассмотрим простой пример:
Наша коллекция developers имеет следующий вид:
> db.developers.find().pretty()
{
"_id" : ObjectId("5815f4e735ee883c37ac8b4d"),
"title" : "Eugene Suleimanov",
"specialty" : "Java",
"skills" : [
"Java",
"Hibernate",
"Spring"
],
"salary" : 3500
}
{
"_id" : ObjectId("5815f4ec35ee883c37ac8b4e"),
"title" : "Ivan Ivanov",
"specialty" : "Java",
"skills" : [
"Java",
"Hibernate",
"Spring"
],
"salary" : 3500
}
{
"_id" : ObjectId("5815f4f535ee883c37ac8b4f"),
"title" : "Nikolai Nikolaev",
"specialty" : "C++",
"skills" : [
"C++",
"STL",
"SQL"
],
"salary" : 2500
}
Перезапишем объект с ID:5815f4f535ee883c37ac8b4f.
Для этого нам необходимо использовать следующую команду:
> db.developers.save( { "_id": ObjectId("5815f4f535ee883c37ac8b4f"), "title" : "Nikolay Nikolaev", "specialty": "C++", "skills": ["C++", "STL", "SQL"], "salary" : 3500 } )
WriteResult({ "nMatched" : 1, "nUpserted" : 0, "nModified" : 1 })
Проверим нашу коллекцию developers ещё раз:
> db.developers.find().pretty()
{
"_id" : ObjectId("5815f4e735ee883c37ac8b4d"),
"title" : "Eugene Suleimanov",
"specialty" : "Java",
"skills" : [
"Java",
"Hibernate",
"Spring"
],
"salary" : 3500
}
{
"_id" : ObjectId("5815f4ec35ee883c37ac8b4e"),
"title" : "Ivan Ivanov",
"specialty" : "Java",
"skills" : [
"Java",
"Hibernate",
"Spring"
],
"salary" : 3500
}
{
"_id" : ObjectId("5815f4f535ee883c37ac8b4f"),
"title" : "Nikolay Nikolaev",
"specialty" : "C++",
"skills" : [
"C++",
"STL",
"SQL"
],
"salary" : 3500
}
На этом мы заканчиваем изучение способов изменений документов в коллекциях.
В следующей статье мы рассмотрим, как удалять документы в MongoDB.