2016-08-13 126 views
0

我不確定我是否問正確的問題,但我認爲這只是一個基本的mongodb問題。Mongo將對象添加到原始對象

目前,我有這樣的:

{ 
"_id" : ObjectId("57af98d4d71c4efff5304335"), 
"fullname" : "test", 
"username" : "test", 
"email" : "[email protected]", 
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2" 
} 

,我想補充的練習對象是這樣的:

{ 
"_id" : ObjectId("57af98d4d71c4efff5304335"), 
"fullname" : "test", 
"username" : "test", 
"email" : "[email protected]", 
"password" : "$2a$10$Wl29i6FemBrnOKq/ZErSguxlfvqoayZQkaEDirkmDl5O3GDEQjOV2", 
"exercises": { 
      "benchpress", 
      "rows", 
      "curls", 
} 

我只是不確定如何創建對象的練習,而無需使用$push這只是打開一個數組。我不想要一個數組,我想要一個對象。

任何幫助將不勝感激。

回答

1

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個參數。

  1. 查詢找到更新
  2. 更新參數(文檔更新)的文件。您可以替換整個文檔或僅替換文檔的特定部分(使用$ set)。
  3. 一個可選對象,可告訴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/