Обновить запись в базе данных с помощью мангуста - PullRequest
0 голосов
/ 05 августа 2020

Здравствуйте, я использую mon goose.

Я построил этот запрос, который находит мой желаемый проект:

const projects = await ClientManagers.findOne({'project.contactPerson.work_email' : 'testing@email.com'} , { 'project.$.companyName': 1 });

это возвращает объект из моей базы данных, например:

{
 'projectName' : 'x',
  'companyName' : 'x bv'
}

Как изменить название компании на «Y bv» вместо «x bv».

Ответы [ 2 ]

1 голос
/ 05 августа 2020

Предполагая, что это структура вашего документа,

{
    "_id" : ObjectId("5f2ae5a4b1549ac0460920dd"),
    "projectName" : "A",
    "project" : [ 
        {
            "companyName" : "T1",
            "contactPerson" : {
                "work_email" : "t1@gmail.com"
            }
        }, 
        {
            "companyName" : "T2",
            "contactPerson" : {
                "work_email" : "t2@gmail.com"
            }
        }
    ]
}

Одно обновление updateOne ()

Если вы знаете, что email будет уникальным и вы хотите обновить одиночный документ, затем используйте updateOne().

  • первая часть запроса для поиска условия, электронная почта t1@gmail.com
  • вторая часть установки / обновления, здесь $ для массива, потому что project - это массив, обновите companyName до T1 Company
await ClientManagers.updateOne(
    { 'project.contactPerson.work_email': 't1@gmail.com' },
    {
        $set: { "project.$.companyName": "T1 Companmy" }
    }
)

Множественное обновление updateMany ()

Если email не является уникальным и хотите обновлять везде, тогда используйте updateMany(), он обновит все соответствующие документы.

await ClientManagers.updateMany(
    { 'project.contactPerson.work_email': 't1@gmail.com' },
    {
        $set: { "project.$.companyName": "T1 Company" }
    }
)

Не предлагая использовать метод update () , потому что он устарел в понедельник goose и выдаст Предупреждения об устаревании , эта функция заменяется методами updateOne(), updateMany() и replaceOne().

0 голосов
/ 05 августа 2020

Хорошее начало. В Mon go есть лучшая документация с примерами. Я предлагаю вам также сослаться на это.

используйте update

db.collection.update({companyName:'x bv'}, {"$set":{"companyName":y}})

Mon go чувствителен к регистру. Таким образом, имя должно точно совпадать.

update обновляет один документ. Чтобы обновить несколько, используйте параметр updateMany или multi:true с update или findOneAndMondify для одного обновления для случая find and update.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...