Обновить запрос в оболочке MongoDB

В оболочке мой запрос:

db.checkin_4e95ae0926abe9ad28000001.update({location_city:"New York"}, {location_country: "FUDGE!"});

Тем не менее, это на самом деле не обновляет мои записи. Это тоже не ошибка. Когда я делаю db.checkin_4e95ae0926abe9ad28000001.find({location_city:"New York"}); после этого я получаю все свои результаты, кроме location_country не изменилось:

{
    "_id": ObjectId("4e970209a0290b70660009e9"),
    "addedOn": ISODate("2011-10-13T15:21:45.772Z"),
    "location_address1": "",
    "location_city": "New York",
    "location_country": "United States",
    "location_latLong": {
        "xLon": -74.007124,
        "yLat": 40.71455
    },
    "location_source": "socialprofile",
    "location_state": "New York",
    "location_zip": ""
}

4 ответа

Решение

Изменено в версии 3.6. Ниже приводится синтаксис для обновления:

db.collection.update(
   <query>,
   <update>,
   {
     upsert: <boolean>,
     multi: <boolean>,
     writeConcern: <document>,
     collation: <document>,
     arrayFilters: [ <filterdocument1>, ... ]
   }
)

Пример:

db.getCollection('products').update({},{$unset: {translate:1, qordoba_translation_version:1}}, {multi: true})

В вашем примере:

db.checkin_4e95ae0926abe9ad28000001.update(
   {location_city:"New York"}, //query
   // $update query
   { $set : { location_country: "FUDGE!"}});

По умолчанию метод update() обновляет один документ. Установите параметр Multi Parameter для обновления всех документов, которые соответствуют критериям запроса.

Пример 2:

   db.checkin_4e95ae0926abe9ad28000001.update(
       {location_city:"New York"}, //query
       // $update query
       { $set : { location_country: "FUDGE!"}}, {multi: true});

Это потому, что во втором параметре функции обновления вам нужно использовать оператор $set для обновления location_country как в примере ниже:

db.checkin_4e95ae0926abe9ad28000001.update(
   {location_city:"New York"}, //find criteria
   // this row contains fix with $set oper
   { $set : { location_country: "FUDGE!"}}); 

Здесь вы можете найти список доступных операторов обновления.

db.m_country.update(
    {"countryId": "962a0935-bf3d-4f63-a53c-254760273ede"}, 
    {$set: {'countryPopulation': '12540000'}})

Перед обновлением

      > db.student.find({name:"Venky"}).pretty();

{
    "_id" : ObjectId("6012e64dc2979ddffe1e5df9"),
    "name" : "Venky",
    "dept" : "MCA",
    "age" : "26",
    "phone" : "89786465"

}

Команда обновления

      > db.student.update({name:"Venky"},{$set: {name:"DODDANNA CHAWAN",dept:"MCA(CS)", age:"25", phone:"1234567890"}});

Найти команду Посмотреть результат

      > db.student.find({name:"DODDANNA CHAWAN"}).pretty();

После обновленного результата

      {
    "_id" : ObjectId("6012e64dc2979ddffe1e5df9"),
    "name" : "DODDANNA CHAWAN",
    "dept" : "MCA(CS)",
    "age" : "25",
    "phone" : "1234567890"

}

в реальной жизни используйте уникальный «_id», чтобы соответствовать документу, потому что имена будут найдены как дубликаты.

Другие вопросы по тегам