你好,我在用猫鼬。
我已经建立了此查询来找到我想要的项目:
const projects = await ClientManagers.findOne({'project.contactPerson.work_email' : 'testing@email.com'} , { 'project.$.companyName': 1 });
这将从我的数据库中返回一个对象,如下所示:
{
'projectName' : 'x',
'companyName' : 'x bv'
}
如何将公司名称更新为“ y bv”而不是“ x bv”。
答案 0 :(得分:1)
假设这是您的文档结构,
{
"_id" : ObjectId("5f2ae5a4b1549ac0460920dd"),
"projectName" : "A",
"project" : [
{
"companyName" : "T1",
"contactPerson" : {
"work_email" : "t1@gmail.com"
}
},
{
"companyName" : "T2",
"contactPerson" : {
"work_email" : "t2@gmail.com"
}
}
]
}
如果您知道email
是唯一的并且想更新单个文档,请使用updateOne()
。
t1@gmail.com
$
是数组,因为project
是一个数组,请将companyName
更新为T1 Company
await ClientManagers.updateOne(
{ 'project.contactPerson.work_email': 't1@gmail.com' },
{
$set: { "project.$.companyName": "T1 Companmy" }
}
)
如果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:true
或update
选项和findOneAndMondify
或find and update
进行一次更新。