object
是一個鍵值對。在第二個文檔的表示中,嵌套文檔exercises
作爲鍵和它的值作爲僅包含字符串的對象。你沒看到有什麼奇怪的東西嗎?沒有鍵的對象?
它應該可能是字符串的array
。請注意,array
確實是object
,其中密鑰是從0開始的數字索引,值是該位置的string
。
(您有一個逗號和一個缺少的curly-brace
。讓我們修復該問題。) 這是我們希望在更新文檔後看到的文檔。
{
"_id" : ObjectId("57af98d4d71c4efff5304335"),
"fullname" : "test",
"username" : "test",
"email" : "[email protected]",
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2",
"exercises": [
"benchpress",
"rows",
"curls"
]
}
現在,回到你的問題。我們如何使用練習文件更新現有文件?它非常簡單。 Mongodb有一個'更新'方法,正是這樣做。由於我們不想替換整個文檔並只添加其他字段,因此我們應該使用$set
來更新特定字段。啓動mongo shell並使用use db-name
切換到您的數據庫。然後執行以下命令。我假設你有一個id
ObjectId(「57af98d4d71c4efff5304335」)的現有文檔。請注意,ObjectId是一個BSON
數據類型。
db.scratch.update({ "_id" : ObjectId("57af98d4d71c4efff5304335") }, { $set: {"exercises": ["benchpress", "rows", "curls"] } })
這將更新文檔
{
"_id" : ObjectId("57af98d4d71c4efff5304335"),
"fullname" : "test",
"username" : "test",
"email" : "[email protected]",
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2",
"exercises" : [
"benchpress",
"rows",
"curls"
]
}
這裏劃傷指的是集合名稱。 update
方法需要3個參數。
- 查詢找到更新
- 更新參數(文檔更新)的文件。您可以替換整個文檔或僅替換文檔的特定部分(使用$ set)。
- 一個可選對象,可告訴Mongodb在文檔不存在的情況下插入記錄(
upsert
)或更新符合條件的多個文檔(multiple
)。
EXTRA
警告:如果您執行在蒙戈外殼下面,
db.scratch.update({ "_id" : ObjectId("57af98d4d71c4efff5304335") }, {"exercises": ["benchpress", "rows", "curls"] })
整個文檔會除了_id
現場進行更換。因此,該記錄將如下所示:
{
"_id" : ObjectId("57af98d4d71c4efff5304335"),
"exercises" : [
"benchpress",
"rows",
"curls"
]
}
您應該只在知道後果時執行此操作。
希望這會有所幫助。
欲瞭解更多信息,請參閱https://docs.mongodb.com/manual/reference/method/db.collection.update/