使用猫鼬更新数据库条目

时间:2020-08-05 15:37:44

标签: javascript node.js mongodb mongoose

你好,我在用猫鼬。

我已经建立了此查询来找到我想要的项目:

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 个答案:

答案 0 :(得分:1)

假设这是您的文档结构,

{
    "_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()方法,因为该方法已在猫鼬中弃用,并且会给出Deprecation Warnings ,因此该函数将替换为updateOne()updateMany()replaceOne()方法。

答案 1 :(得分:0)

好的开始。 Mongo有更好的示例文档。我建议您也参考一下。

使用update

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

Mongo区分大小写。因此名称应完全匹配。

update更新一个文档。要更新多个版本,请在updateMany情况下使用multi:trueupdate选项和findOneAndMondifyfind and update进行一次更新。