如何使用該方法????????????()來實作以下更改?
empeId為“e001”的員工添加新體驗“HIVE” 。
和
將員工 e001 的電子郵件帳戶更改為“jamesbond$hotmail.com”。
以下是有問題的資料庫
db.empeProject.insert([ {
"Employee": [ { "empeId": "e001",
"fName": "James",
"lName": "Bond",
"email": "[email protected]",
"experience": [
"Database Design",
"SQL",
"Java" ]
},
{ "empeId": "e002",
"fName": "Harry",
"lName": "Potter",
"experience": [
"Data Warehouse",
"SQL",
"Spark Scala",
"Java Scripts" ]
} ],
"Project": [ { "projectId": "p001",
"projectTitle": "Install MongoDB" },
{ "projectId": "p002",
"projectTitle": "Install Oracle" },
{ "projectId": "p003",
"projectTitle": "Install Hadoop" } ],
"EmployeeProject": [ { "empeId": "e001",
"projectId": "p001",
"hoursWorked": 4 },
{ "empeId": "e001",
"projectId": "p003",
"hoursWorked": 2 },
{ "empeId": "e002",
"projectId": "p003",
"hoursWorked": 5 } ]
} ] );
目前我首先嘗試的是
db.empeProject.update(
{"Employee.empeId":"e001"},
{"$push":{"Employee.experience":"HIVE"}}
)
第二個是
db.empeProject.update(
{"Employee.empeId":"e001"},{"$set":
{"Employee.email":"jamesbond$hotmail.com"}}
)
在這兩種情況下,我都有一個錯誤
無法在元素中創建欄位
uj5u.com熱心網友回復:
解決方案 1
對于這兩種情況,您都需要一個$運算子來更新陣列中的第一個匹配元素。
db.empeProject.update({
"Employee.empeId": "e001"
},
{
"$push": {
"Employee.$.experience": "HIVE"
}
})
Q1 演示解決方案 1 @ Mongo Playground
db.empeProject.update({
"Employee.empeId": "e001"
},
{
"$set": {
"Employee.$.email": "jamesbond$hotmail.com"
}
})
Q2 @ Mongo Playground 的演示解決方案 1
解決方案 2
此外,您還可以使用$[<identifier>]過濾的位置運算子等arrayFilters。
db.empeProject.update({
"Employee.empeId": "e001"
},
{
"$push": {
"Employee.$[emp].experience": "HIVE"
}
},
{
arrayFilters: [
{
"emp.empeId": "e001"
}
]
})
db.empeProject.update({
"Employee.empeId": "e001"
},
{
"$set": {
"Employee.$[emp].email": "jamesbond$hotmail.com"
}
},
{
arrayFilters: [
{
"emp.empeId": "e001"
}
]
})
uj5u.com熱心網友回復:
您正在嘗試更新陣列內的內容。MongoDB 使用位置運算子 ($) 來標識要更新的陣列中的正確元素,而無需顯式指定陣列中元素的位置。
可以試試下面的嗎?(我沒有自己嘗試過,但我相信它應該可以作業)
db.empeProject.update(
{"Employee.empeId":"e001"},
{"$set":{"Employee.$.email":"jamesbond$hotmail.com"}}
)
轉載請註明出處,本文鏈接:https://www.uj5u.com/qukuanlian/532487.html
