Поиск…


Синтаксис

  • вставка ( документ или массив документов )
  • 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 } }
)


Modified text is an extract of the original Stack Overflow Documentation
Лицензировано согласно CC BY-SA 3.0
Не связан с Stack Overflow