MongoDB
Операция CRUD
Поиск…
Синтаксис
- вставка ( документ или массив документов )
- insertOne ('document', {writeConcern: 'document'})
- insertMany ({[документ 1, документ 2, ...]}, {writeConcern: document, ordered: boolean})
- поиск ( запрос , проецирование )
- findOne ( запрос , проецирование )
- обновление ( запрос , обновление )
- updateOne ( запрос , обновление , {upsert: boolean, writeConcern: document})
- updateMany ( запрос , обновление , {upsert: boolean, writeConcern: document})
- replaceOne ( запрос , замена , {upsert: boolean, writeConcern: document})
- remove ( query , justOne )
- findAndModify ( запрос , сортировка , обновление , опции [необязательно] )
замечания
Обновление и удаление документа необходимо выполнить осторожно. Поскольку операция может повлиять на несколько документов.
Создайте
db.people.insert({name: 'Tom', age: 28});
Или же
db.people.save({name: 'Tom', age: 28});
Разница с save
заключается в том, что если переданный документ содержит поле _id
, если документ уже существует с этим _id
он будет обновлен, а не будет добавлен как новый.
Два новых метода вставки документов в коллекцию, в MongoDB 3.2.x: -
Используйте insertOne
для вставки только одной записи: -
db.people.insertOne({name: 'Tom', age: 28});
Используйте insertMany
для вставки нескольких записей: -
db.people.insertMany([{name: 'Tom', age: 28},{name: 'John', age: 25}, {name: 'Kathy', age: 23}])
Обратите внимание, что insert
подчеркнута как устаревшая в каждом официальном драйвере с версии 3.0. Полное различие заключается в том, что методы оболочки фактически отставали от других драйверов при реализации метода. То же самое относится ко всем другим методам CRUD
Обновить
Обновить весь объект:
db.people.update({name: 'Tom'}, {age: 29, name: 'Tom'})
// New in MongoDB 3.2
db.people.updateOne({name: 'Tom'},{age: 29, name: 'Tom'}) //Will replace only first matching document.
db.people.updateMany({name: 'Tom'},{age: 29, name: 'Tom'}) //Will replace all matching documents.
Или просто обновите одно поле документа. В этом случае age
:
db.people.update({name: 'Tom'}, {$set: {age: 29}})
Вы также можете обновить несколько документов одновременно, добавив третий параметр. Этот запрос обновит все документы, где имя равно Tom
:
db.people.update({name: 'Tom'}, {$set: {age: 29}}, {multi: true})
// New in MongoDB 3.2
db.people.updateOne({name: 'Tom'},{$set:{age: 30}) //Will update only first matching document.
db.people.updateMany({name: 'Tom'},{$set:{age: 30}}) //Will update all matching documents.
Если новое обновление будет обновляться, это поле будет добавлено в документ.
db.people.updateMany({name: 'Tom'},{$set:{age: 30, salary:50000}})// Document will have `salary` field as well.
Если документ необходимо заменить,
db.collection.replaceOne({name:'Tom'}, {name:'Lakmal',age:25,address:'Sri Lanka'})
может быть использован.
Примечание . Поля, используемые для идентификации объекта, будут сохранены в обновленном документе. Поле, которое не определено в разделе обновления, будет удалено из документа.
удалять
Удаляет все документы, соответствующие параметру запроса:
// New in MongoDB 3.2
db.people.deleteMany({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'})
Или просто один
// New in MongoDB 3.2
db.people.deleteOne({name: 'Tom'})
// All versions
db.people.remove({name: 'Tom'}, true)
Метод MongoDB remove()
. Если вы выполните эту команду без какого-либо аргумента или без пустого аргумента, она удалит все документы из коллекции.
db.people.remove();
или же
db.people.remove({});
Читать
Запрос для всех документов в коллекции people
которые имеют поле name
со значением 'Tom'
:
db.people.find({name: 'Tom'})
Или просто первый:
db.people.findOne({name: 'Tom'})
Вы также можете указать, какие поля возвращать, передав параметр выбора поля. Следующее исключает поле _id
и включает только поле age
:
db.people.find({name: 'Tom'}, {_id: 0, age: 1})
Примечание: по умолчанию возвращается поле _id
, даже если вы не запрашиваете его. Если вы хотите , чтобы не получить _id
обратно, вы можете просто следовать за предыдущий пример и попросить _id
быть исключены с указанием _id: 0
(или _id: false
) .Если вы хотите , чтобы найти суб запись как адрес объекта содержит страну , город и т. д.
db.people.find({'address.country': 'US'})
& укажите поле также, если потребуется
db.people.find({'address.country': 'US'}, {'name': true, 'address.city': true})Remember that the result has a `.pretty()` method that pretty-prints resulting JSON:
db.people.find().pretty()
Дополнительные операторы обновления
Вы можете использовать другие операторы помимо $set
при обновлении документа. Оператор $push
позволяет вывести значение в массив, в этом случае мы добавим новый псевдоним в массив nicknames
.
db.people.update({name: 'Tom'}, {$push: {nicknames: 'Tommy'}})
// This adds the string 'Tommy' into the nicknames array in Tom's document.
Оператор $pull
является противоположным $push
, вы можете вытаскивать определенные элементы из массивов.
db.people.update({name: 'Tom'}, {$pull: {nicknames: 'Tommy'}})
// This removes the string 'Tommy' from the nicknames array in Tom's document.
Оператор $pop
позволяет удалить первое или последнее значение из массива. Скажем, у документа Тома есть свойство, называемое родными братьями, имеющее значение ['Marie', 'Bob', 'Kevin', 'Alex']
.
db.people.update({name: 'Tom'}, {$pop: {siblings: -1}})
// This will remove the first value from the siblings array, which is 'Marie' in this case.
db.people.update({name: 'Tom'}, {$pop: {siblings: 1}})
// This will remove the last value from the siblings array, which is 'Alex' in this case.
Параметр «multi» при обновлении нескольких документов
Чтобы обновить несколько документов в коллекции, установите для параметра multi значение true.
db.collection.update(
query,
update,
{
upsert: boolean,
multi: boolean,
writeConcern: document
}
)
multi является необязательным. Если установлено значение true, обновляется несколько документов, соответствующих критериям запроса. Если установлено значение false, обновляется один документ. Значение по умолчанию неверно.
db.mycol.find () {"_id": ObjectId (598354878df45ec5), "title": "Обзор MongoDB"} {"_id": ObjectId (59835487adf45ec6), "title": "Обзор NoSQL"} {"_id": ObjectId (59835487adf45ec7), «title»: «Обзор точек учебников»}
db.mycol.update ({'title': 'Обзор MongoDB'}, {$ set: {'title': 'New MongoDB Tutorial'}}, {multi: true})
Обновление встроенных документов.
Для следующей схемы:
{name: 'Tom', age: 28, marks: [50, 60, 70]}
Обновите отметки Тома до 55, где метки равны 50 (используйте оператор позиционирования $):
db.people.update({name: "Tom", marks: 50}, {"$set": {"marks.$": 55}})
Для следующей схемы:
{name: 'Tom', age: 28, marks: [{subject: "English", marks: 90},{subject: "Maths", marks: 100}, {subject: "Computes", marks: 20}]}
Обновите английские отметки Тома до 85:
db.people.update({name: "Tom", "marks.subject": "English"},{"$set":{"marks.$.marks": 85}})
Пример выше:
Используя {name: "Tom", "marks.subject": "English"}, вы получите позицию объекта в массиве меток, где предметом является английский. В «меток. $. Marks» $ используется для обновления в этой позиции массива меток
Обновить значения в массиве
Оператор positional $ идентифицирует элемент в массиве для обновления без явного указания положения элемента в массиве.
Рассмотрим студентов сборника со следующими документами:
{ "_id" : 1, "grades" : [ 80, 85, 90 ] }
{ "_id" : 2, "grades" : [ 88, 90, 92 ] }
{ "_id" : 3, "grades" : [ 85, 100, 90 ] }
Чтобы обновить от 80 до 82 в массиве grades в первом документе, используйте оператор positional $, если вы не знаете позицию элемента в массиве:
db.students.update(
{ _id: 1, grades: 80 },
{ $set: { "grades.$" : 82 } }
)